2 CLASS(VoretColorpicker) EXTENDS(Image)
\r
3 METHOD(VoretColorpicker, configureVoretColorpicker, void(entity, entity))
\r
4 METHOD(VoretColorpicker, mousePress, float(entity, vector))
\r
5 METHOD(VoretColorpicker, mouseRelease, float(entity, vector))
\r
6 METHOD(VoretColorpicker, mouseDrag, float(entity, vector))
\r
7 ATTRIB(VoretColorpicker, controlledTextbox, entity, NULL)
\r
8 ATTRIB(VoretColorpicker, image, string, SKINGFX_COLORPICKER)
\r
9 ATTRIB(VoretColorpicker, imagemargin, vector, SKINMARGIN_COLORPICKER)
\r
10 ATTRIB(VoretColorpicker, focusable, float, 1)
\r
11 METHOD(VoretColorpicker, focusLeave, void(entity))
\r
12 METHOD(VoretColorpicker, keyDown, float(entity, float, float, float))
\r
13 METHOD(VoretColorpicker, draw, void(entity))
\r
14 ENDCLASS(VoretColorpicker)
\r
15 entity makeVoretColorpicker(entity theTextbox);
\r
18 #ifdef IMPLEMENTATION
\r
19 entity makeVoretColorpicker(entity theTextbox)
\r
22 me = spawnVoretColorpicker();
\r
23 me.configureVoretColorpicker(me, theTextbox);
\r
27 void configureVoretColorpickerVoretColorpicker(entity me, entity theTextbox)
\r
29 me.controlledTextbox = theTextbox;
\r
30 me.configureImage(me, me.image);
\r
33 float mousePressVoretColorpicker(entity me, vector coords)
\r
35 me.mouseDrag(me, coords);
\r
39 // must match hslimage.c
\r
40 vector hslimage_color(vector v, vector margin)
\r
42 v_x = (v_x - margin_x) / (1 - 2 * margin_x);
\r
43 v_y = (v_y - margin_y) / (1 - 2 * margin_y);
\r
44 if(v_x < 0) v_x = 0;
\r
45 if(v_y < 0) v_y = 0;
\r
46 if(v_x > 1) v_x = 1;
\r
47 if(v_y > 1) v_y = 1;
\r
48 if(v_y > 0.875) // grey bar
\r
49 return hsl_to_rgb(eZ * v_x);
\r
51 return hsl_to_rgb(v_x * 6 * eX + eY + v_y / 0.875 * eZ);
\r
54 float mouseDragVoretColorpicker(entity me, vector coords)
\r
59 i = me.controlledTextbox.cursorPos;
\r
62 if(substring(me.controlledTextbox.text, i-2, 1) == "^")
\r
63 if(strstrofs("0123456789", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0)
\r
65 me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
\r
66 me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
\r
73 if(substring(me.controlledTextbox.text, i-5, 2) == "^x")
\r
74 if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-3, 1), 0) >= 0)
\r
75 if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-2, 1), 0) >= 0)
\r
76 if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0)
\r
78 me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
\r
79 me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
\r
80 me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
\r
81 me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
\r
82 me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
\r
90 margin = me.imagemargin;
\r
91 if(coords_x >= margin_x)
\r
92 if(coords_y >= margin_y)
\r
93 if(coords_x <= 1 - margin_x)
\r
94 if(coords_y <= 1 - margin_y)
\r
95 me.controlledTextbox.enterText(me.controlledTextbox, rgb_to_hexcolor(hslimage_color(coords, margin)));
\r
100 float mouseReleaseVoretColorpicker(entity me, vector coords)
\r
102 me.mouseDrag(me, coords);
\r
106 void focusLeaveVoretColorpicker(entity me)
\r
108 me.controlledTextbox.saveCvars(me.controlledTextbox);
\r
110 float keyDownVoretColorpicker(entity me, float key, float ascii, float shift)
\r
112 return me.controlledTextbox.keyDown(me.controlledTextbox, key, ascii, shift);
\r
114 void drawVoretColorpicker(entity me)
\r
119 C = cvar("r_textcontrast");
\r
120 B = cvar("r_textbrightness");
\r
122 // for this to work, C/(1-B) must be in 0..1
\r
126 B = bound(0, B, 1);
\r
127 C = bound(0, C, 1-B);
\r
129 aC = 1 - C / (1 - B);
\r
131 draw_Picture(me.imgOrigin, strcat(me.src, "_m"), me.imgSize, '0 0 0', aC);
\r
132 draw_Picture(me.imgOrigin, strcat(me.src, "_m"), me.imgSize, me.color, B);
\r