diff --git a/FL/Fl_Window.H b/FL/Fl_Window.H index fdcdc2930..f51199975 100644 --- a/FL/Fl_Window.H +++ b/FL/Fl_Window.H @@ -587,8 +587,9 @@ public: virtual class Fl_Double_Window *as_double_window() {return 0L;} void shape(const Fl_Image* img); - void shape(const Fl_Image& b) ; + void shape(const Fl_Image& b); const Fl_Image *shape(); + void draw_backdrop(); int screen_num(); void screen_num(int screen_num); static bool is_a_rescale(); diff --git a/src/Fl_Tabs.cxx b/src/Fl_Tabs.cxx index f84a0002f..1f5aaadd1 100644 --- a/src/Fl_Tabs.cxx +++ b/src/Fl_Tabs.cxx @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -805,10 +806,12 @@ void Fl_Tabs::draw() { if (parent()) { Fl_Widget *p = parent(); fl_push_clip(x(), tabs_y, w(), tabs_h); - if (p->as_window()) + if (Fl_Window *win = p->as_window()) { fl_draw_box(p->box(), 0, 0, p->w(), p->h(), p->color()); - else + win->draw_backdrop(); + } else { fl_draw_box(p->box(), p->x(), p->y(), p->w(), p->h(), p->color()); + } fl_pop_clip(); } else { fl_rectf(x(), tabs_y, w(), tabs_h, color()); diff --git a/src/Fl_Window.cxx b/src/Fl_Window.cxx index 551a61882..f2d527485 100644 --- a/src/Fl_Window.cxx +++ b/src/Fl_Window.cxx @@ -507,16 +507,7 @@ void Fl_Window::draw() if (damage() & ~FL_DAMAGE_CHILD) { // draw the entire thing draw_box(box(),0,0,w(),h(),color()); // draw box with x/y = 0 - - if (image() && (align() & FL_ALIGN_INSIDE)) { // draw the image only - Fl_Label l1; - memset(&l1,0,sizeof(l1)); - l1.align_ = align(); - l1.image = image(); - if (!active_r() && l1.image && l1.deimage) l1.image = l1.deimage; - l1.type = labeltype(); - l1.draw(0,0,w(),h(),align()); - } + draw_backdrop(); } draw_children(); @@ -524,6 +515,21 @@ void Fl_Window::draw() if (!to_display) current_ = save_current; } +/** + Draw the background image if one is set and is aligned inside. + */ +void Fl_Window::draw_backdrop() { + if (image() && (align() & FL_ALIGN_INSIDE)) { // draw the image only + Fl_Label l1; + memset(&l1,0,sizeof(l1)); + l1.align_ = align(); + l1.image = image(); + if (!active_r() && l1.image && l1.deimage) l1.image = l1.deimage; + l1.type = labeltype(); + l1.draw(0,0,w(),h(),align()); + } +} + void Fl_Window::make_current() { pWindowDriver->make_current(); diff --git a/test/unittest_schemes.cxx b/test/unittest_schemes.cxx index 93ec3c353..e6e5cee69 100644 --- a/test/unittest_schemes.cxx +++ b/test/unittest_schemes.cxx @@ -315,16 +315,18 @@ public: o->labelcolor((Fl_Color)55); o->tooltip("Fl_Adjuster with up box"); } // Fl_Adjuster* o - { Fl_Text_Editor* o = new Fl_Text_Editor(220, 53, 100, 29, "down frame"); + { Fl_Text_Editor* o = new Fl_Text_Editor(220, 40, 100, 25); o->box(FL_DOWN_FRAME); o->color((Fl_Color)19); o->selection_color(FL_DARK1); - o->tooltip("Fl_Adjuster with down frame"); + o->buffer(new Fl_Text_Buffer); + o->tooltip("Fl_Text_Editor with down frame"); } // Fl_Text_Editor* o - { Fl_Text_Editor* o = new Fl_Text_Editor(220, 99, 100, 38, "up frame"); + { Fl_Text_Editor* o = new Fl_Text_Editor(220, 70, 100, 25); o->box(FL_UP_FRAME); o->color((Fl_Color)19); o->selection_color(FL_DARK1); + o->buffer(new Fl_Text_Buffer); o->tooltip("Fl_Text_Editor with up frame"); } // Fl_Text_Editor* o }