Xonotic
colorpicker.qc
Go to the documentation of this file.
1 #include "colorpicker.qh"
2 
3 #include "inputbox.qh"
4 
6 {
7  entity me;
9  me.configureXonoticColorpicker(me, theTextbox);
10  return me;
11 }
12 
14 {
15  me.controlledTextbox = theTextbox;
16  me.configureImage(me, me.image);
17 }
18 
19 METHOD(XonoticColorpicker, mousePress, bool(XonoticColorpicker this, vector pos))
20 {
21  this.mouseDrag(this, pos);
22  return true;
23 }
24 
25 // must match hslimage.c
27 {
28  v_x = (v.x - margin.x) / (1 - 2 * margin.x);
29  v_y = (v.y - margin.y) / (1 - 2 * margin.y);
30  if(v.x < 0) v_x = 0;
31  if(v.y < 0) v_y = 0;
32  if(v.x > 1) v_x = 1;
33  if(v.y > 1) v_y = 1;
34  if(v.y > 0.875) // grey bar
35  return hsl_to_rgb(eZ * v.x);
36  else
37  return hsl_to_rgb(v.x * 6 * eX + eY + v.y / 0.875 * eZ);
38 }
39 
41 {
42  vector pos = '0 0 0';
43  v = rgb_to_hsl(v);
44  if (v.y)
45  {
46  pos_x = v.x / 6;
47  pos_y = v.z * 0.875;
48  }
49  else // grey scale
50  {
51  pos_x = v.z;
52  pos_y = 0.875 + 0.07;
53  }
54  pos_x = margin.x + pos.x * (1 - 2 * margin.x);
55  pos_y = margin.y + pos.y * (1 - 2 * margin.y);
56  return pos;
57 }
58 
60 {
61  int i;
62  for (;;)
63  {
64  i = me.controlledTextbox.cursorPos;
65  string theText = me.controlledTextbox.text;
66  vector res = checkColorCode(theText, strlen(theText), i, true);
67  if (!res.x)
68  break;
69 
70  int cc_len = res.x;
71  int new_pos = i - res.y;
72  theText = strcat(substring(theText, 0, new_pos), substring(theText, new_pos + cc_len, -1));
73  me.controlledTextbox.setText(me.controlledTextbox, theText);
74  me.controlledTextbox.cursorPos = new_pos;
75  }
76 
77  if(substring(me.controlledTextbox.text, i-1, 1) == "^")
78  {
79  if(!isCaretEscaped(me.controlledTextbox.text, i-1))
80  me.controlledTextbox.enterText(me.controlledTextbox, "^"); // escape previous caret
81  }
82 
83  vector margin;
84  margin = me.imagemargin;
85  if(coords.x >= margin.x)
86  if(coords.y >= margin.y)
87  if(coords.x <= 1 - margin.x)
88  if(coords.y <= 1 - margin.y)
89  me.controlledTextbox.enterText(me.controlledTextbox, rgb_to_hexcolor(hslimage_color(coords, margin)));
90 
91  return 1;
92 }
93 
95 {
97  me.mouseDrag(me, coords);
98  return 1;
99 }
100 
102 {
103  me.controlledTextbox.saveCvars(me.controlledTextbox);
104 }
105 float XonoticColorpicker_keyDown(entity me, float key, float ascii, float shift)
106 {
107  return me.controlledTextbox.keyDown(me.controlledTextbox, key, ascii, shift);
108 }
110 {
111  SUPER(XonoticColorpicker).draw(me);
112 
113  float B, C, aC;
114  C = cvar("r_textcontrast");
115  B = cvar("r_textbrightness");
116 
117  // for this to work, C/(1-B) must be in 0..1
118  // B must be < 1
119  // C must be < 1-B
120 
121  B = bound(0, B, 1);
122  C = bound(0, C, 1-B);
123 
124  aC = 1 - C / (1 - B);
125 
126  draw_Picture(me.imgOrigin, strcat(me.src, "_m"), me.imgSize, '0 0 0', aC);
127  draw_Picture(me.imgOrigin, strcat(me.src, "_m"), me.imgSize, me.color, B);
128 }
void XonoticColorpicker_configureXonoticColorpicker(entity me, entity theTextbox)
Definition: colorpicker.qc:13
ERASEABLE vector hsl_to_rgb(vector hsl)
Definition: color.qh:167
const vector eY
Definition: vector.qh:45
#define NEW(cname,...)
Definition: oo.qh:105
void XonoticColorpicker_focusLeave(entity me)
Definition: colorpicker.qc:101
ERASEABLE bool isCaretEscaped(string theText, float pos)
Definition: string.qh:511
entity() spawn
ERASEABLE vector rgb_to_hsl(vector rgb)
Definition: color.qh:147
#define METHOD(cname, name, prototype)
Definition: oo.qh:257
#define SUPER(cname)
Definition: oo.qh:219
float XonoticColorpicker_mouseDrag(entity me, vector coords)
Definition: colorpicker.qc:59
float XonoticColorpicker_keyDown(entity me, float key, float ascii, float shift)
Definition: colorpicker.qc:105
spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 spree_cen s1 f1 s1 strcat(_("Level %s: "), "^BG%s\3\, _("^BGPress ^F2%s^BG to enter the game"))
void XonoticColorpicker_draw(entity me)
Definition: colorpicker.qc:109
vector hslimage_color(vector v, vector margin)
Definition: colorpicker.qc:26
float XonoticColorpicker_mouseRelease(entity me, vector coords)
Definition: colorpicker.qc:94
vector(float skel, float bonenum) _skel_get_boneabs_hidden
vector v
Definition: ent_cs.qc:116
const vector eX
Definition: vector.qh:44
entity makeXonoticColorpicker(entity theTextbox)
Definition: colorpicker.qc:5
const vector eZ
Definition: vector.qh:46
ERASEABLE vector checkColorCode(string theText, int text_len, int pos, bool check_at_the_end)
Definition: string.qh:540
vector color_hslimage(vector v, vector margin)
Definition: colorpicker.qc:40
ERASEABLE string rgb_to_hexcolor(vector rgb)
Definition: color.qh:183