grumpytoad / Canvas/NME (http://flashsandy.org/haxe)

A re-implementation of NME for use with the HTML5 canvas element on the javascript target. Currently implemented against Neash. This project is no longer actively maintained against the current neash version.

Clone this repository (size: 107.4 KB): HTTPS / SSH
$ hg clone http://bitbucket.org/grumpytoad/canvas-nme/
commit 1: 101bf7319a53
parent 0: 5a5ae1522633
branch: default
Initial step towards proper text/font handling
Niel Drummond / grumpytoad
15 months ago

Changed (Δ10.1 KB):

raw changeset »

canvas/FontHandle.hx (49 lines added, 0 lines removed)

canvas/KeyCode.hx (257 lines added, 0 lines removed)

canvas/Manager.hx (5 lines added, 1 lines removed)

canvas/display/Graphics.hx (7 lines added, 4 lines removed)

Up to file-list canvas/FontHandle.hx:

1
package canvas;
2
import Type;
3
4
5
typedef FontMetrics =
6
{
7
   var height:Int;
8
   var ascent:Int;
9
   var descent:Int;
10
   var max_x_advance:Int;
11
}
12
13
typedef GlyphMetrics =
14
{
15
   var min_x: Int;
16
   var max_x: Int;
17
   var width: Int;
18
   var height : Int;
19
   var x_advance: Int;
20
}
21
22
23
class FontHandle
24
{
25
   public var handle(get_handle,null):Dynamic;
26
   var mHandle:Dynamic;
27
28
   public function new(inName:String, inSize:Int)
29
   {
30
					throw "Not implemented. new Fonthandle.";
31
   }
32
33
   public function GetGlyphMetrics(inChar:Dynamic) : GlyphMetrics
34
   {
35
      var c : Int = Type.typeof(inChar) == ValueType.TInt ? inChar :
36
                            inChar.charCodeAt(0) ;
37
					throw "Not implemented. GetGlyphMetrics.";
38
					return null;
39
   }
40
41
   public function GetFontMetrics() : FontMetrics
42
   {
43
					throw "Not implemented. GetFontMetrics.";
44
					return null;
45
   }
46
47
   public function get_handle() : Dynamic { return mHandle; }
48
49
}

Up to file-list canvas/KeyCode.hx:

1
package canvas;
2
3
class KeyCode
4
{
5
	/* The keyboard syms have been cleverly chosen to map to ASCII */
6
   public static var UNKNOWN		= 0;
7
   public static var FIRST		= 0;
8
   public static var BACKSPACE		= 8;
9
   public static var TAB		= 9;
10
   public static var CLEAR		= 12;
11
   public static var RETURN		= 13;
12
   public static var PAUSE		= 19;
13
   public static var ESCAPE		= 27;
14
   public static var SPACE		= 32;
15
   public static var EXCLAIM		= 33;
16
   public static var QUOTEDBL		= 34;
17
   public static var HASH		= 35;
18
   public static var DOLLAR		= 36;
19
   public static var AMPERSAND		= 38;
20
   public static var QUOTE		= 39;
21
   public static var LEFTPAREN		= 40;
22
   public static var RIGHTPAREN		= 41;
23
   public static var ASTERISK		= 42;
24
   public static var PLUS		= 43;
25
   public static var COMMA		= 44;
26
   public static var MINUS		= 45;
27
   public static var PERIOD		= 46;
28
   public static var SLASH		= 47;
29
   public static var KEY_0			= 48;
30
   public static var KEY_1			= 49;
31
   public static var KEY_2			= 50;
32
   public static var KEY_3			= 51;
33
   public static var KEY_4			= 52;
34
   public static var KEY_5			= 53;
35
   public static var KEY_6			= 54;
36
   public static var KEY_7			= 55;
37
   public static var KEY_8			= 56;
38
   public static var KEY_9			= 57;
39
   public static var COLON		= 58;
40
   public static var SEMICOLON		= 59;
41
   public static var LESS		= 60;
42
   public static var EQUALS		= 61;
43
   public static var GREATER		= 62;
44
   public static var QUESTION		= 63;
45
   public static var AT			= 64;
46
	/* 
47
	   Skip uppercase letters
48
	 */
49
   public static var LEFTBRACKET	= 91;
50
   public static var BACKSLASH		= 92;
51
   public static var RIGHTBRACKET	= 93;
52
   public static var CARET		= 94;
53
   public static var UNDERSCORE		= 95;
54
   public static var BACKQUOTE		= 96;
55
   public static var a			= 97;
56
   public static var b			= 98;
57
   public static var c			= 99;
58
   public static var d			= 100;
59
   public static var e			= 101;
60
   public static var f			= 102;
61
   public static var g			= 103;
62
   public static var h			= 104;
63
   public static var i			= 105;
64
   public static var j			= 106;
65
   public static var k			= 107;
66
   public static var l			= 108;
67
   public static var m			= 109;
68
   public static var n			= 110;
69
   public static var o			= 111;
70
   public static var p			= 112;
71
   public static var q			= 113;
72
   public static var r			= 114;
73
   public static var s			= 115;
74
   public static var t			= 116;
75
   public static var u			= 117;
76
   public static var v			= 118;
77
   public static var w			= 119;
78
   public static var x			= 120;
79
   public static var y			= 121;
80
   public static var z			= 122;
81
   public static var DELETE		= 127;
82
	/* End of ASCII mapped keysyms */
83
84
	/* International keyboard syms */
85
   public static var WORLD_0		= 160;		/* 0xA0 */
86
   public static var WORLD_1		= 161;
87
   public static var WORLD_2		= 162;
88
   public static var WORLD_3		= 163;
89
   public static var WORLD_4		= 164;
90
   public static var WORLD_5		= 165;
91
   public static var WORLD_6		= 166;
92
   public static var WORLD_7		= 167;
93
   public static var WORLD_8		= 168;
94
   public static var WORLD_9		= 169;
95
   public static var WORLD_10		= 170;
96
   public static var WORLD_11		= 171;
97
   public static var WORLD_12		= 172;
98
   public static var WORLD_13		= 173;
99
   public static var WORLD_14		= 174;
100
   public static var WORLD_15		= 175;
101
   public static var WORLD_16		= 176;
102
   public static var WORLD_17		= 177;
103
   public static var WORLD_18		= 178;
104
   public static var WORLD_19		= 179;
105
   public static var WORLD_20		= 180;
106
   public static var WORLD_21		= 181;
107
   public static var WORLD_22		= 182;
108
   public static var WORLD_23		= 183;
109
   public static var WORLD_24		= 184;
110
   public static var WORLD_25		= 185;
111
   public static var WORLD_26		= 186;
112
   public static var WORLD_27		= 187;
113
   public static var WORLD_28		= 188;
114
   public static var WORLD_29		= 189;
115
   public static var WORLD_30		= 190;
116
   public static var WORLD_31		= 191;
117
   public static var WORLD_32		= 192;
118
   public static var WORLD_33		= 193;
119
   public static var WORLD_34		= 194;
120
   public static var WORLD_35		= 195;
121
   public static var WORLD_36		= 196;
122
   public static var WORLD_37		= 197;
123
   public static var WORLD_38		= 198;
124
   public static var WORLD_39		= 199;
125
   public static var WORLD_40		= 200;
126
   public static var WORLD_41		= 201;
127
   public static var WORLD_42		= 202;
128
   public static var WORLD_43		= 203;
129
   public static var WORLD_44		= 204;
130
   public static var WORLD_45		= 205;
131
   public static var WORLD_46		= 206;
132
   public static var WORLD_47		= 207;
133
   public static var WORLD_48		= 208;
134
   public static var WORLD_49		= 209;
135
   public static var WORLD_50		= 210;
136
   public static var WORLD_51		= 211;
137
   public static var WORLD_52		= 212;
138
   public static var WORLD_53		= 213;
139
   public static var WORLD_54		= 214;
140
   public static var WORLD_55		= 215;
141
   public static var WORLD_56		= 216;
142
   public static var WORLD_57		= 217;
143
   public static var WORLD_58		= 218;
144
   public static var WORLD_59		= 219;
145
   public static var WORLD_60		= 220;
146
   public static var WORLD_61		= 221;
147
   public static var WORLD_62		= 222;
148
   public static var WORLD_63		= 223;
149
   public static var WORLD_64		= 224;
150
   public static var WORLD_65		= 225;
151
   public static var WORLD_66		= 226;
152
   public static var WORLD_67		= 227;
153
   public static var WORLD_68		= 228;
154
   public static var WORLD_69		= 229;
155
   public static var WORLD_70		= 230;
156
   public static var WORLD_71		= 231;
157
   public static var WORLD_72		= 232;
158
   public static var WORLD_73		= 233;
159
   public static var WORLD_74		= 234;
160
   public static var WORLD_75		= 235;
161
   public static var WORLD_76		= 236;
162
   public static var WORLD_77		= 237;
163
   public static var WORLD_78		= 238;
164
   public static var WORLD_79		= 239;
165
   public static var WORLD_80		= 240;
166
   public static var WORLD_81		= 241;
167
   public static var WORLD_82		= 242;
168
   public static var WORLD_83		= 243;
169
   public static var WORLD_84		= 244;
170
   public static var WORLD_85		= 245;
171
   public static var WORLD_86		= 246;
172
   public static var WORLD_87		= 247;
173
   public static var WORLD_88		= 248;
174
   public static var WORLD_89		= 249;
175
   public static var WORLD_90		= 250;
176
   public static var WORLD_91		= 251;
177
   public static var WORLD_92		= 252;
178
   public static var WORLD_93		= 253;
179
   public static var WORLD_94		= 254;
180
   public static var WORLD_95		= 255;		/* 0xFF */
181
182
	/* Numeric keypad */
183
   public static var KP0		= 256;
184
   public static var KP1		= 257;
185
   public static var KP2		= 258;
186
   public static var KP3		= 259;
187
   public static var KP4		= 260;
188
   public static var KP5		= 261;
189
   public static var KP6		= 262;
190
   public static var KP7		= 263;
191
   public static var KP8		= 264;
192
   public static var KP9		= 265;
193
   public static var KP_PERIOD		= 266;
194
   public static var KP_DIVIDE		= 267;
195
   public static var KP_MULTIPLY	= 268;
196
   public static var KP_MINUS		= 269;
197
   public static var KP_PLUS		= 270;
198
   public static var KP_ENTER		= 271;
199
   public static var KP_EQUALS		= 272;
200
201
	/* Arrows + Home/End pad */
202
   public static var UP			= 273;
203
   public static var DOWN		= 274;
204
   public static var RIGHT		= 275;
205
   public static var LEFT		= 276;
206
   public static var INSERT		= 277;
207
   public static var HOME		= 278;
208
   public static var END		= 279;
209
   public static var PAGEUP		= 280;
210
   public static var PAGEDOWN		= 281;
211
212
	/* Function keys */
213
   public static var F1			= 282;
214
   public static var F2			= 283;
215
   public static var F3			= 284;
216
   public static var F4			= 285;
217
   public static var F5			= 286;
218
   public static var F6			= 287;
219
   public static var F7			= 288;
220
   public static var F8			= 289;
221
   public static var F9			= 290;
222
   public static var F10		= 291;
223
   public static var F11		= 292;
224
   public static var F12		= 293;
225
   public static var F13		= 294;
226
   public static var F14		= 295;
227
   public static var F15		= 296;
228
229
	/* Key state modifier keys */
230
   public static var NUMLOCK		= 300;
231
   public static var CAPSLOCK		= 301;
232
   public static var SCROLLOCK		= 302;
233
   public static var RSHIFT		= 303;
234
   public static var LSHIFT		= 304;
235
   public static var RCTRL		= 305;
236
   public static var LCTRL		= 306;
237
   public static var RALT		= 307;
238
   public static var LALT		= 308;
239
   public static var RMETA		= 309;
240
   public static var LMETA		= 310;
241
   public static var LSUPER		= 311;		/* Left "Windows" key */
242
   public static var RSUPER		= 312;		/* Right "Windows" key */
243
   public static var MODE		= 313;		/* "Alt Gr" key */
244
   public static var COMPOSE		= 314;		/* Multi-key compose key */
245
246
	/* Miscellaneous function keys */
247
   public static var HELP		= 315;
248
   public static var PRINT		= 316;
249
   public static var SYSREQ		= 317;
250
   public static var BREAK		= 318;
251
   public static var MENU		= 319;
252
   public static var POWER		= 320;		/* Power Macintosh power key */
253
   public static var EURO		= 321;		/* Some european keyboards */
254
   public static var UNDO		= 322;		/* Atari keyboard has Undo */
255
256
}
257

Up to file-list canvas/Manager.hx:

@@ -166,7 +166,11 @@ class Manager
166
166
167
167
	public static function SetCursor(inCursor:Int)
168
168
   {
169
					throw("Not implemented. SetCursor. ");
169
					if ( inCursor == 0 ) {
170
							__scr.style.cursor = 'url("blank.cur"), pointer';
171
					} else {
172
							__scr.style.cursor = 'auto';
173
					}
170
174
   }
171
175
172
176
   static public function GetMouse() : canvas.geom.Point

Up to file-list canvas/display/Graphics.hx:

@@ -224,8 +224,8 @@ class Graphics
224
224
					var ctx = Manager.getScreen();
225
225
226
226
					ctx.translate( inMatrix.tx, inMatrix.ty );
227
					//ctx.setTransform( inMatrix.a, inMatrix.b, inMatrix.c, inMatrix.d, inMatrix.tx, inMatrix.ty );
228
227
					for ( d in mDrawList ) {
228
									ctx.save();
229
229
							ctx.beginPath();
230
230
							for ( p in d.points ) {
231
231
									switch (p.type) {
@@ -250,6 +250,8 @@ class Graphics
250
250
									ctx.fillStyle =  '#' + StringTools.hex( fillColour, 6 );
251
251
									ctx.fill();
252
252
							}
253
							ctx.restore();
254
253
255
							var bitmap = d.bitmap;
254
256
							if ( bitmap != null ) {
255
257
									ctx.save();
@@ -261,7 +263,8 @@ class Graphics
261
263
									// other browsers do not and must decompose the drawing matrix
262
264
263
265
									try {
264
										ctx.setTransform( matrix.a,  matrix.b,  matrix.c,  matrix.d,  matrix.tx,  matrix.ty );
266
										ctx.transform( matrix.a,  matrix.b,  matrix.c,  matrix.d,  matrix.tx,  matrix.ty );
267
										//ctx.setTransform( matrix.a,  matrix.b,  matrix.c,  matrix.d,  matrix.tx,  matrix.ty );
265
268
									} catch (e:Dynamic) {
266
269
267
270
										var svd = Decompose.singularValueDecomposition( matrix );   
@@ -616,7 +619,7 @@ class Graphics
616
619
      }
617
620
   }
618
621
619
			var origin:Dynamic;
622
			//var origin:Dynamic;
620
623
   public function lineTo(inX:Float,inY:Float)
621
624
   {
622
625
      var pid = mPoints.length;
@@ -630,7 +633,7 @@ class Graphics
630
633
      mPenY = inY;
631
634
      mPoints.push( new GfxPoint( mPenX, mPenY, 0.0, 0.0, LINE ) );
632
635
633
						if ( !mFilling && inX == origin.x && inY == origin.y ) ClosePolygon(false);
636
						//if ( !mFilling && inX == origin.x && inY == origin.y ) ClosePolygon(false);
634
637
635
638
   }
636
639