Changes

Jump to navigation Jump to search

Changes in OS 3.2

2,126 bytes added, 03:14, 7 May 2014
Line 1: Line 1: −
__NOTOC__
  −
   
In its TI-Nspire OS 3.2, TI updated the Lua scripting API.
 
In its TI-Nspire OS 3.2, TI updated the Lua scripting API.
   Line 6: Line 4:     
==Compatibility mode==
 
==Compatibility mode==
Let me first begin with the compatibility mode. TI has 2 "apiLevel's" in 3.2. apiLevel 1.0 provides backwards compatibility for &lt;3.2 OS's by keeping the old API structure.<br />
+
TI has 2 "[[platform.apilevel|apilevel]]s" in 3.2. apilevel 1.0 provides backwards compatibility for &lt; 3.2 OSes by keeping the old API structure.<br />
'''All''' documents created for 3.1 and previous will run in that apiLevel by default. This is because some changes in the XML structure of the document. So most programs and games should run fine by default.<br /> Then there is apiLevel 2.0. This apiLevel has some big changes to the API structure, so you will have to update some of your code in order to have some of they new 3.2 stuff. However, it is currently not possible to create apiLevel 2.0 documents with [[Luna]] due to changes in the XML structure (Luna crash). Lua may get updated soon.<br />
+
'''All''' documents created for 3.1 and previous will run in that apilevel by default. This is because some changes in the XML structure of the document. So most programs and games should run fine by default.<br /> Then there is apilevel 2.0. This apilevel has some big changes to the API structure, so you will have to update some of your code in order to have some of they new 3.2 stuff.<br />
For the best support and guarantee that you are using the correct apiLevel, you should add the following to the top of new Lua documents you create:
+
For the best support and guarantee that you are using the correct apilevel, you should add the following to the top of new Lua documents you create:
:''platform.apiLevel = "1.0"'' or ''platform.apiLevel = "2.0"''
+
:''platform.apilevel = "1.0"'' ( or ''platform.apilevel = "2.0"'' depending on what you plan to use)
<br />
     −
==on.create==
+
==Events==
[[on.create]] is removed in apiLevel 2.0 and replaced with [[on.construction]].<br />
+
* [[on.create]] is removed in apilevel 2.0 and replaced with [[on.construction]]. This event handler is guaranteed to run before all others.<br />
This event handler is guaranteed to run before all others.<br />
+
* New : [[on.getFocus]] is called when the script receives user input focus.
 +
* New : [[on.loseFocus]] is called when the script loses user input focus.
 +
* New : [[on.getSymbolList]] is called when the script app symbol list is being serialized to the clipboard.
 +
* Changed : if the mouse ([[cursor]]) is not shown whenever the user presses the center button of the clickpad/touchpad, [[on.mouseDown]] is now fired, with its parameters x and y being both 0.
    
==Graphical operations==  
 
==Graphical operations==  
Line 20: Line 20:  
* [[gc:setColorRGB]] now supports one number as input (as well as the old style). For example, you can do [[gc:setColorRGB]](0xFF00CC) or [[gc:setColorRGB]](0)
 
* [[gc:setColorRGB]] now supports one number as input (as well as the old style). For example, you can do [[gc:setColorRGB]](0xFF00CC) or [[gc:setColorRGB]](0)
 
* You can not use coordinates for drawing to the screen above/under (-) 32 000. (Be careful, some scripts might need to take that into account now, or they may crash)
 
* You can not use coordinates for drawing to the screen above/under (-) 32 000. (Be careful, some scripts might need to take that into account now, or they may crash)
* In [[platform.apiLevel|apiLevel]] 2.0, [[platform.gc]]() is removed and replaced with [[platform.withGC]](). An example of it:<br />  
+
* [[gc:clipRect]] doesn't have the ''intersect'' option anymore.
<syntaxhighlight>function getStringWidth(gc, str)
+
* In [[platform.apilevel|apilevel]] 2.0, [[platform.gc]]() is removed and replaced with [[platform.withGC]](). Usage example:<br />  
  return gc:getStringWidth(str)
+
 
 +
<syntaxhighlight>function getHeightWidth(str, gc)
 +
    local width = gc:getStringWidth(str) -- Gets the pixel length of str
 +
    local height = gc:getStringHeight(str) -- Gets the pixel height of str
 +
    return height, width
 
end
 
end
function on.construction() -- was on.create before
+
height, width = platform.withGC(getHeightWidth, 'Hello World')</syntaxhighlight>
  local strw = platform.withGC(getStringWidth, "The game") -- was platform.gc() before
+
What it does is calling the function you give as first argument, and additionally passing a dummy [[gc|GC]] (Graphics Context) to it.
end</syntaxhighlight>
  −
So what it does it call the function you give as first argument and pass a dummy [[gc|GC]] (Graphics Context) to it.
      
==D2Editor==
 
==D2Editor==
[[D2Editor|D2Editor]] has been greatly improved <br />  
+
[[D2Editor|D2Editor]] has been greatly improved ; Here are the new functions :<br />
 +
* [[D2Editor:createChemBox]]()
 +
* [[D2Editor:createMathBox]]()
 +
* [[D2Editor:getExpressionSelection]]()
 +
* [[D2Editor:hasFocus]]()
 +
* [[D2Editor:isVisible]]()
 +
* [[D2Editor:registerFilter]](handlerTable)
 +
* [[D2Editor:setDisable2DinRT]]
 +
* [[D2Editor:setBorder]]
 +
* [[D2Editor:setBorderColor]]
 +
* [[D2Editor:setColorable]]
 +
* [[D2Editor:setTextColor]](color)
 +
* [[D2Editor:setTextChangeListener]]
 +
* [[D2Editor:setSizeChangeListener]](function(editor, w, h))
 +
* [[D2Editor:setSelectable]](true or false)
 +
* [[D2Editor:setReadOnly]](true or false)
 +
* [[D2Editor:setVisible]](true or false)
 +
* [[D2Editor:setMainFont]](family, style)
 +
* [[D2Editor:setWordWrapWidth]](width)
    
==Require==
 
==Require==
Line 36: Line 56:  
The physics module is the chipmunk physics engine.<br />  
 
The physics module is the chipmunk physics engine.<br />  
 
color is just a table containing colors. (color.red (or color["red"]) will return the color code for red.)<br />
 
color is just a table containing colors. (color.red (or color["red"]) will return the color code for red.)<br />
We don't know what strict is or does. <br />
+
'strict' is a module (not tested) which, apparently, makes it so Lua checks uses of undeclared global variables. All global variables must be 'declared' through a regular assignment (even assigning nil will do) in a main chunk before being used anywhere or assigned to inside a function.<br />
 
Usage: [[require]] 'modulename'<br />
 
Usage: [[require]] 'modulename'<br />
    
==Physics==
 
==Physics==
Maybe the best part of it of. OS 3.2 now includes the Open Source Chipmunk [[Physics_Engine|Physics engine]], and you can use it right from Lua!<br /> This will allow some great games and applications <br /> Tutorials about it coming soon.<br />
+
Maybe the best part of it : OS 3.2 now includes the Open Source Chipmunk [[Physics_Engine|Physics engine]], and you can use it right from Lua!<br /> This will allow some great games and applications <br /> Find all the functions/categories [[:Category:Physics_Engine|here]] (WIP !).Tutorials about it coming soon.<br />
    
==Image==
 
==Image==
[[image.rotate]]. Performs images rotation.<br />
+
[[image.rotate]]. Performs images rotation. (Warning : The image changes size when you rotate it. So you need to figure where to draw it based on the middle of its rotated size.)
    
==Math==
 
==Math==
New : [[math.evalStr]], [[math.getEvalSettings]] and  [[math.setEvalSettings]].<br />
+
* [[math.eval]] was revised to remove the optional argument exact and use current document settings, approximate mode, and full precision
 +
* New : [[math.evalStr]], [[math.getEvalSettings]] and  [[math.setEvalSettings]].<br />
    
==Platform==
 
==Platform==
Line 52: Line 73:  
* [[platform.registerErrorHandler]], this allows you to take actions when an error occurs in your document.  
 
* [[platform.registerErrorHandler]], this allows you to take actions when an error occurs in your document.  
 
* [[platform.window:setFocus]], regain focus in your script.<br />
 
* [[platform.window:setFocus]], regain focus in your script.<br />
 +
* [[platform.hw]](), returns a number corresponding to the device the scripts is running on.
 +
 +
==Toolpalette==
 +
If the [[platform.apilevel|APILevel]] is set to '2.0', the names of toolpalette items may be changed dynamically while the program is running.
 +
Calling toolpalette.register(nil) deactivates the toolpalette.
    
==Variable==
 
==Variable==
* [[var.recallAt]], fetch data from a certain spot in a list or matrix<br />
+
* [[var.recallAt]] : fetches data from a certain spot in a list or matrix<br />
* [[var.makeNumericList]], create a list in the symbol table. The create list will work much more efficient with other var functions.
+
* [[var.storeAt]] : Stores a numeric value into an element of a math list or matrix with the given name.<br />
 +
* [[var.makeNumericList]] : creates a list in the symbol table with the given name. The list is optimized to hold numeric values.

Navigation menu