diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Terminal.cxx | 71 |
1 files changed, 38 insertions, 33 deletions
diff --git a/src/Fl_Terminal.cxx b/src/Fl_Terminal.cxx index b829af511..925f53ac5 100644 --- a/src/Fl_Terminal.cxx +++ b/src/Fl_Terminal.cxx @@ -3723,45 +3723,50 @@ void Fl_Terminal::draw_buff(int Y) const { followed by the terminal's screen contents. */ void Fl_Terminal::draw(void) { - // First time shown? Force deferred font size calculations here (issue 837) - if (fontsize_defer_) { - fontsize_defer_ = false; // clear flag - current_style_->update(); // do deferred update here - update_screen(true); // update fonts - } - // Detect if Fl::scrollbar_size() was changed in size, recalc if so - if (scrollbar_size_ == 0 && - ((scrollbar->visible() && scrollbar->w() != Fl::scrollbar_size()) || - (hscrollbar->visible() && hscrollbar->h() != Fl::scrollbar_size()))) { - update_scrollbar(); - } - // Draw group first, terminal last - Fl_Group::draw(); - // Draw that little square between the scrollbars: - if (scrollbar->visible() && hscrollbar->visible()) { - fl_color(parent()->color()); - fl_rectf(scrollbar->x(), hscrollbar->y(), scrollbar_actual_size(), scrollbar_actual_size()); - } - if (is_frame(box())) { - // Is box() a frame? Fill area inside frame with rectf(). - // FL_XXX_FRAME types allow Fl_Terminal to have a /flat/ background. - // FL_XXX_BOX types inherit Fl::scheme() which can provide unwanted gradients. - // - fl_color(Fl_Group::color()); - // Draw flat field (inside border drawn by Fl_Group::draw() above) - int X = x() + Fl::box_dx(box()); - int Y = y() + Fl::box_dy(box()); - int W = w() - Fl::box_dw(box()); - int H = h() - Fl::box_dh(box()); - if (scrollbar->visible()) W -= scrollbar_actual_size(); - if (hscrollbar->visible()) H -= scrollbar_actual_size(); - fl_rectf(X,Y,W,H); + int cx = x() + Fl::box_dx(box()); + int cy = y() + Fl::box_dy(box()); + int cw = w() - Fl::box_dw(box()); + int ch = h() - Fl::box_dh(box()); + fl_push_clip(cx,cy,cw,ch); + { + // First time shown? Force deferred font size calculations here (issue 837) + if (fontsize_defer_) { + fontsize_defer_ = false; // clear flag + current_style_->update(); // do deferred update here + update_screen(true); // update fonts + } + // Detect if Fl::scrollbar_size() was changed in size, recalc if so + if (scrollbar_size_ == 0 && + ((scrollbar->visible() && scrollbar->w() != Fl::scrollbar_size()) || + (hscrollbar->visible() && hscrollbar->h() != Fl::scrollbar_size()))) { + update_scrollbar(); + } + // Draw group first, terminal last + Fl_Group::draw(); + // Draw that little square between the scrollbars: + if (scrollbar->visible() && hscrollbar->visible()) { + fl_color(parent()->color()); + fl_rectf(scrollbar->x(), hscrollbar->y(), scrollbar_actual_size(), scrollbar_actual_size()); + } + if (is_frame(box())) { + // Is box() a frame? Fill area inside frame with rectf(). + // FL_XXX_FRAME types allow Fl_Terminal to have a /flat/ background. + // FL_XXX_BOX types inherit Fl::scheme() which can provide unwanted gradients. + // + fl_color(Fl_Group::color()); + // Draw flat field (inside border drawn by Fl_Group::draw() above) + fl_rectf(scrn_.x(), scrn_.y(), scrn_.w(), scrn_.h()); + } } + fl_pop_clip(); + //DEBUG fl_color(0x80000000); // dark red box inside margins //DEBUG fl_rect(scrn_); fl_push_clip(scrn_.x(), scrn_.y(), scrn_.w(), scrn_.h()); + { int Y = scrn_.y(); draw_buff(Y); + } fl_pop_clip(); } |
