vicon drag tweaks, proxy drag fix, vicon mouseover, binfolder around sort fix, draw_r...
[goodguy/history.git] / cinelerra-5.1 / guicast / bctextbox.C
index 2a34c18096952024b3c7c5fa9eb1a40a8432843c..57a8c5dd31277cfcdaaf708b977c349cf5300500 100644 (file)
@@ -166,6 +166,8 @@ int BC_TextBox::reset_parameters(int rows, int has_border, int font, int size)
        text_x = 0;
        enabled = 1;
        highlighted = 0;
+       back_color = -1;
+       high_color = -1;
        precision = 4;
        if (!skip_cursor)
                skip_cursor = new Timer;
@@ -281,13 +283,13 @@ int BC_TextBox::initialize()
        BC_Resources *resources = get_resources();
        if(has_border)
        {
-               back_color = resources->text_background;
-               high_color = resources->text_background_hi;
+               if( back_color < 0 ) back_color = resources->text_background;
+               if( high_color < 0 ) high_color = resources->text_background_hi;
        }
        else
        {
-               high_color = resources->text_background_noborder_hi;
-               back_color = bg_color;
+               if( back_color < 0 ) back_color = bg_color;
+               if( high_color < 0 ) high_color = resources->text_background_noborder_hi;
        }
 
        draw(0);
@@ -456,7 +458,8 @@ int BC_TextBox::update(const char *text)
 {
 //printf("BC_TextBox::update 1 %d %s %s\n", tstrcmp(text), text, this->text);
 // Don't update if contents are the same
-       if(!tstrcmp(text)) return 0;
+       int bg_color = has_border || !highlighted ? back_color : high_color;
+       if( bg_color == background_color && !tstrcmp(text)) return 0;
        tstrcpy(text);
        int wtext_len = wtext_update();
        if(highlight_letter1 > wtext_len) highlight_letter1 = wtext_len;
@@ -519,6 +522,8 @@ int BC_TextBox::get_text_x() { return text_x; }
 int BC_TextBox::get_text_y() { return text_y; }
 void BC_TextBox::set_text_x(int v) { text_x = v; }
 void BC_TextBox::set_text_y(int v) { text_y = v; }
+int BC_TextBox::get_back_color() { return back_color; }
+void BC_TextBox::set_back_color(int v) { back_color = v; }
 
 int BC_TextBox::pixels_to_rows(BC_WindowBase *window, int font, int pixels)
 {
@@ -655,12 +660,7 @@ void BC_TextBox::draw(int flush)
 
 //printf("BC_TextBox::draw %d %s\n", __LINE__, text);
 // Background
-       if(has_border)
-               background_color = resources->text_background;
-       else if(highlighted)
-               background_color = high_color;
-       else
-               background_color = back_color;
+       background_color = has_border || !highlighted ? back_color : high_color;
        set_color(background_color);
        draw_box(0, 0, w, h);
 
@@ -1128,9 +1128,19 @@ int BC_TextBox::repeat_event(int64_t duration)
 void BC_TextBox::default_keypress(int &dispatch_event, int &result)
 {
        int key = top_level->get_keypress(), len;
-       if( (key == RETURN) || ( key >= 32 && key <= 255 ) ) {
+       if( (key == RETURN) || ( key >= 32 && key <= 255 ) ||
+           (key >= KP1 && key <= KP9) || key == KPINS ) {
                wchar_t *wkeys = top_level->get_wkeystring(&len);
-               if( key == RETURN ) { wkeys[0] = '\n';  wkeys[1] = 0;  len = 1; }
+               switch( key ) {
+               case RETURN: key = '\n';  goto kpchr;
+               case KPINS:  key = '0';   goto kpchr;
+               case KP1: case KP2: case KP3: case KP4: case KP5:
+               case KP6: case KP7: case KP8: case KP9:
+                       key = key - KP1 + '1';
+               kpchr:
+                       wkeys[0] = key;  wkeys[1] = 0;  len = 1;
+                       break;
+               }
                insert_text(wkeys, len);
                find_ibeam(1);
                draw(1);
@@ -1185,6 +1195,10 @@ int BC_TextBox::keypress_event()
                        result = 1;
                        wlen = 0;
                        break; }
+               case KPINS: last_keypress = KP1-'1'+'0'; // fall thru
+               case KP1: case KP2: case KP3: case KP4: case KP5:
+               case KP6: case KP7: case KP8: case KP9:
+                       last_keypress = last_keypress-KP1 + '1';
                case '0': case '1': case '2': case '3': case '4':
                case '5': case '6': case '7': case '8': case '9':
                case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
@@ -1618,7 +1632,7 @@ int BC_TextBox::keypress_event()
 
                default: {
                        if( ctrl_down() ) {
-                               switch( get_keypress() ) {
+                               switch( last_keypress ) {
                                case 'c': case 'C': {
                                        result = copy(0);
                                        break; }