X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbctextbox.C;h=8de77f4f01d755a50f6404d92b4c485ab526cf0f;hb=52c715cbb159b61590b95182eedbadac84bbdfe6;hp=2a34c18096952024b3c7c5fa9eb1a40a8432843c;hpb=c7fa9dc718ca872dd8068d7ddd9f58a81b696a87;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bctextbox.C b/cinelerra-5.1/guicast/bctextbox.C index 2a34c180..8de77f4f 100644 --- a/cinelerra-5.1/guicast/bctextbox.C +++ b/cinelerra-5.1/guicast/bctextbox.C @@ -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,15 +1128,28 @@ 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 ) ) { - wchar_t *wkeys = top_level->get_wkeystring(&len); - if( key == RETURN ) { wkeys[0] = '\n'; wkeys[1] = 0; len = 1; } - insert_text(wkeys, len); - find_ibeam(1); - draw(1); - dispatch_event = 1; - result = 1; - } + wchar_t *wkeys = top_level->get_wkeystring(&len); + switch( key ) { + case KPENTER: key = '\n'; goto kpchr; + case KPMINUS: key = '-'; goto kpchr; + case KPPLUS: key = '+'; goto kpchr; + case KPDEL: key = '.'; goto kpchr; + 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'; goto kpchr; + default: + if( key < 32 || key > 255 ) return; + kpchr: { + wkeys[0] = key; wkeys[1] = 0; len = 1; + break; } + } + insert_text(wkeys, len); + find_ibeam(1); + draw(1); + dispatch_event = 1; + result = 1; } int BC_TextBox::keypress_event() @@ -1185,6 +1198,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 +1635,7 @@ int BC_TextBox::keypress_event() default: { if( ctrl_down() ) { - switch( get_keypress() ) { + switch( last_keypress ) { case 'c': case 'C': { result = copy(0); break; }