r3028 - trunk/data/qcsrc/menu-div0test/nexuiz
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Dec 16 06:53:24 EST 2007
Author: div0
Date: 2007-12-16 06:53:23 -0500 (Sun, 16 Dec 2007)
New Revision: 3028
Added:
trunk/data/qcsrc/menu-div0test/nexuiz/charmap.c
Log:
forgot to commit this
Added: trunk/data/qcsrc/menu-div0test/nexuiz/charmap.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/charmap.c (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/charmap.c 2007-12-16 11:53:23 UTC (rev 3028)
@@ -0,0 +1,130 @@
+#ifdef INTERFACE
+CLASS(NexuizCharmap) EXTENDS(Image)
+ METHOD(NexuizCharmap, configureNexuizCharmap, void(entity, entity))
+ METHOD(NexuizCharmap, mousePress, float(entity, vector))
+ METHOD(NexuizCharmap, mouseRelease, float(entity, vector))
+ METHOD(NexuizCharmap, mouseMove, float(entity, vector))
+ METHOD(NexuizCharmap, mouseDrag, float(entity, vector))
+ METHOD(NexuizCharmap, keyDown, float(entity, float, float, float))
+ METHOD(NexuizCharmap, draw, void(entity))
+ ATTRIB(NexuizCharmap, controlledTextbox, entity, NULL)
+ ATTRIB(NexuizCharmap, image, string, SKINGFX_CHARMAP)
+ ATTRIB(NexuizCharmap, image2, string, SKINGFX_CHARMAP_SELECTED)
+ ATTRIB(NexuizCharmap, focusable, float, 1)
+ ATTRIB(NexuizCharmap, previouslySelectedCharacterCell, float, -1)
+ ATTRIB(NexuizCharmap, selectedCharacterCell, float, 0)
+ ATTRIB(NexuizCharmap, mouseSelectedCharacterCell, float, -1)
+ENDCLASS(NexuizCharmap)
+entity makeNexuizCharmap(entity theTextbox);
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeNexuizCharmap(entity theTextbox)
+{
+ entity me;
+ me = spawnNexuizCharmap();
+ me.configureNexuizCharmap(me, theTextbox);
+ return me;
+}
+
+string CharMap_CellToChar(float c)
+{
+ if(c == 13)
+ return chr(127);
+ else if(c < 32)
+ return chr(c);
+ else
+ return chr(c + 96);
+}
+
+void configureNexuizCharmapNexuizCharmap(entity me, entity theTextbox)
+{
+ me.controlledTextbox = theTextbox;
+ me.configureImage(me, me.image);
+}
+
+float mouseMoveNexuizCharmap(entity me, vector coords)
+{
+ float x, y, c;
+ x = floor(coords_x * 16);
+ y = floor(coords_y * 10);
+ if(x < 0 || y < 0 || x >= 16 || y >= 10)
+ {
+ me.mouseSelectedCharacterCell = -1;
+ return 0;
+ }
+ c = y * 16 + x;
+ if(c != me.mouseSelectedCharacterCell)
+ me.mouseSelectedCharacterCell = me.selectedCharacterCell = c;
+ return 1;
+}
+float mouseDragNexuizCharmap(entity me, vector coords)
+{
+ return me.mouseMove(me, coords);
+}
+float mousePressNexuizCharmap(entity me, vector coords)
+{
+ me.mouseMove(me, coords);
+ if(me.mouseSelectedCharacterCell >= 0)
+ {
+ me.pressed = 1;
+ me.previouslySelectedCharacterCell = me.selectedCharacterCell;
+ }
+ return 1;
+}
+float mouseReleaseNexuizCharmap(entity me, vector coords)
+{
+ if(!me.pressed)
+ return 0;
+ me.mouseMove(me, coords);
+ if(me.selectedCharacterCell == me.previouslySelectedCharacterCell)
+ me.controlledTextbox.enterText(me.controlledTextbox, CharMap_CellToChar(me.selectedCharacterCell));
+ me.pressed = 0;
+ return 1;
+}
+float keyDownNexuizCharmap(entity me, float key, float ascii, float shift)
+{
+ switch(key)
+ {
+ case K_LEFTARROW:
+ me.selectedCharacterCell = mod(me.selectedCharacterCell + 159, 160);
+ return 1;
+ case K_RIGHTARROW:
+ me.selectedCharacterCell = mod(me.selectedCharacterCell + 1, 160);
+ return 1;
+ case K_UPARROW:
+ me.selectedCharacterCell = mod(me.selectedCharacterCell + 144, 160);
+ return 1;
+ case K_DOWNARROW:
+ me.selectedCharacterCell = mod(me.selectedCharacterCell + 16, 160);
+ return 1;
+ case K_HOME:
+ me.selectedCharacterCell = 0;
+ return 1;
+ case K_END:
+ me.selectedCharacterCell = 159;
+ return 1;
+ case K_SPACE:
+ case K_ENTER:
+ case K_INS:
+ me.controlledTextbox.enterText(me.controlledTextbox, CharMap_CellToChar(me.selectedCharacterCell));
+ return 1;
+ default:
+ return me.controlledTextbox.keyDown(me.controlledTextbox, key, ascii, shift);
+ }
+}
+void drawNexuizCharmap(entity me)
+{
+ if(me.focused)
+ {
+ if(!me.pressed || (me.selectedCharacterCell == me.previouslySelectedCharacterCell))
+ {
+ vector c;
+ c = eX * (mod(me.selectedCharacterCell, 16) / 16.0);
+ c += eY * (floor(me.selectedCharacterCell / 16.0) / 10.0);
+ draw_Picture(c, me.image2, '0.0625 0.1 0', '1 1 1', 1);
+ }
+ }
+ drawImage(me);
+}
+#endif
More information about the nexuiz-commits
mailing list