From 2d2351bc7d8e46d75f365c83ed04a64b4a203a73 Mon Sep 17 00:00:00 2001 From: terencehill Date: Tue, 27 Sep 2011 15:03:26 +0200 Subject: [PATCH] Improve detection of color codes when dragging the mouse in the color picker: color code isn't valid if caret is escaped (e.g. ^^x123) --- qcsrc/menu/xonotic/colorpicker.c | 50 ++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/qcsrc/menu/xonotic/colorpicker.c b/qcsrc/menu/xonotic/colorpicker.c index 66f292a03..df9620696 100644 --- a/qcsrc/menu/xonotic/colorpicker.c +++ b/qcsrc/menu/xonotic/colorpicker.c @@ -72,35 +72,47 @@ vector color_hslimage(vector v, vector margin) float XonoticColorpicker_mouseDrag(entity me, vector coords) { - float i; + float i, carets; for(;;) { i = me.controlledTextbox.cursorPos; if(i >= 2) { if(substring(me.controlledTextbox.text, i-2, 1) == "^") - if(strstrofs("0123456789", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0) - { - me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); - me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); - continue; - } + { + carets = 1; + while (i - 2 - carets >= 0 && substring(me.controlledTextbox.text, i - 2 - carets, 1) == "^") + ++carets; + if (carets == 1 || mod(carets, 2) == 1) // first check is just an optimization + if(strstrofs("0123456789", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0) + { + me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); + me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); + continue; + } + } } if(i >= 5) { if(substring(me.controlledTextbox.text, i-5, 2) == "^x") - if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-3, 1), 0) >= 0) - if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-2, 1), 0) >= 0) - if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0) - { - me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); - me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); - me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); - me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); - me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); - continue; - } + { + carets = 1; + while (i - 5 - carets >= 0 && substring(me.controlledTextbox.text, i - 5 - carets, 1) == "^") + ++carets; + if (carets == 1 || mod(carets, 2) == 1) // first check is just an optimization + if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-3, 1), 0) >= 0) + if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-2, 1), 0) >= 0) + if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0) + { + me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); + me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); + me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); + me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); + me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0); + continue; + } + } } break; } @@ -141,7 +153,7 @@ void XonoticColorpicker_draw(entity me) // for this to work, C/(1-B) must be in 0..1 // B must be < 1 // C must be < 1-B - + B = bound(0, B, 1); C = bound(0, C, 1-B); -- 2.39.2