summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGreg Ercolano <erco@seriss.com>2025-11-18 05:15:01 -0800
committerGreg Ercolano <erco@seriss.com>2025-11-18 05:15:01 -0800
commit797e9777731ac9f68e458c3b8e7c22c31482f7b6 (patch)
treebaa7e979bc304a8d9163969b1519c8ec66a6c20a /src
parent6731b79591d369a7af4b74804f886338c0461f53 (diff)
Improved clip handling/fix box()
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Terminal.cxx65
1 files changed, 33 insertions, 32 deletions
diff --git a/src/Fl_Terminal.cxx b/src/Fl_Terminal.cxx
index 925f53ac5..fea9f4121 100644
--- a/src/Fl_Terminal.cxx
+++ b/src/Fl_Terminal.cxx
@@ -3474,6 +3474,7 @@ void Fl_Terminal::init_(int X,int Y,int W,int H,const char*L,int rows,int cols,i
hscrollbar_style_ = SCROLLBAR_AUTO;
resizable(0);
+ clip_children(1); // clips scrollbars within box()
Fl_Group::color(FL_BLACK); // black bg by default
update_screen(true); // update internal vars after setting screen size/font
clear_screen_home(); // clear screen, home cursor
@@ -3723,42 +3724,42 @@ void Fl_Terminal::draw_buff(int Y) const {
followed by the terminal's screen contents.
*/
void Fl_Terminal::draw(void) {
- 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()) {
+ // 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()) {
+ 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);
+ {
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();
+ }
+ 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_);