Merge all of the scrollbar sizes into a single API call

(Fl::scrollbar_size()) rather than a bunch of separate APIs and
hardcoded values (STR #1800)



git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5547 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Michael R Sweet 2006-11-16 23:17:13 +00:00
parent 839ac66401
commit 8ea3a45772
12 changed files with 131 additions and 105 deletions

View File

@ -1,11 +1,13 @@
CHANGES IN FLTK 1.1.8
- Documentation fixes (STR #1454, STR #1455, STR #1456,
STR #1457, STR #1458, STR #1460, STR #1481)
- Added Fl::scrollbar_size() methods that are used by all
of the scrollbar-using widgets (STR #1500)
- fl_read_image() was broken on Intel-based Macs (STR
#1490)
- Fl_Progress was using the wrong width to calculate
progress (STR #1492)
- Documentation fixes (STR #1454, STR #1455, STR #1456,
STR #1457, STR #1458, STR #1460, STR #1481)
- Fl::x(), Fl::y(), Fl::w(), and Fl::h() did not report
the desktop work area on X11 (STR #1482)
- Shortcut events could be sent to the wrong window (STR

View File

@ -109,6 +109,8 @@ public:
static int scheme(const char*);
static const char* scheme() {return scheme_;}
static int reload_scheme();
static int scrollbar_size();
static void scrollbar_size(int W);
// execution:
static int wait();

View File

@ -25,7 +25,7 @@
// http://www.fltk.org/str.php
//
// generated by Fast Light User Interface Designer (fluid) version 1.0107
// generated by Fast Light User Interface Designer (fluid) version 1.0108
#ifndef Fl_Help_Dialog_H
#define Fl_Help_Dialog_H
@ -37,11 +37,11 @@
#include <FL/Fl_Input.H>
class FL_EXPORT Fl_Help_Dialog {
int index_;
int max_;
int line_[100];
char file_[100][256];
int find_pos_;
int index_;
int max_;
int line_[100];
char file_[100][256];
int find_pos_;
public:
Fl_Help_Dialog();
private:

View File

@ -121,6 +121,7 @@ state information and global methods for the current application.</P>
<LI><A HREF="#Fl.scheme">scheme</A></LI>
<LI><A HREF="#Fl.screen_count">screen_count</A></LI>
<LI><A HREF="#Fl.screen_xywh">screen_xywh</A></LI>
<LI><A HREF="#Fl.scrollbar_size">scrollbar_size</A></LI>
<LI><A HREF="#Fl.selection">selection</A></LI>
<LI><A HREF="#Fl.selection_owner">selection_owner</A></LI>
<LI><A HREF="#Fl.set_abort">set_abort</A></LI>
@ -1128,6 +1129,15 @@ specified coordinates. The last form gets the bounding box for
the numbered screen, where <tt>n</tt> is a number from 0 to the
number of screens less 1.</P>
<H4><A NAME="Fl.scrollbar_size">void scrollbar_size(int W);<BR>
int scrollbar_size();</A></H4>
<P>Sets or gets the default scrollbar size that is used by the
<A HREF="Fl_Browser_.html#Fl_Browser_"><TT>Fl_Browser_</TT></A>,
<A HREF="Fl_Help_View.html#Fl_Help_View"><TT>Fl_Help_View</TT></A>,
<A HREF="Fl_Scroll.html#Fl_Scroll"><TT>Fl_Scroll</TT></A>, and
<A HREF="Fl_Text_Display.html#Fl_Text_Display"><TT>Fl_Text_Display</TT></A> widgets.</P>
<H4><A NAME="Fl.selection">void selection(Fl_Widget &amp;owner, const char* stuff, int len);</A></H4>
<P>Changes the current selection. The block of text is

View File

@ -681,7 +681,8 @@ For a description of the <TT>fl_</TT> functions, see
<LI>scrollbar_align: <A HREF="Fl_Text_Display.html#Fl_Text_Display.scrollbar_align">Fl_Text_Display</A></LI>
<LI>scrollbar_left: <A href="Fl_Browser_.html#Fl_Browser_.scrollbar_left">Fl_Browser_</A></LI>
<LI>scrollbar_right: <A href="Fl_Browser_.html#Fl_Browser_.scrollbar_right">Fl_Browser_</A></LI>
<LI>scrollbar_width: <A HREF="Fl_Text_Display.html#Fl_Text_Display.scrollbar_width">Fl_Text_Display</A></LI>
<LI>scrollbar_size: <A HREF="Fl.html#Fl.scrollbar_size">Fl</A></LI>
<LI>scrollbar_width: <A HREF="Fl_Browser_.html#Fl_Browser_.scrollbar_width">Fl_Browser_</A>, <A HREF="Fl_Text_Display.html#Fl_Text_Display.scrollbar_width">Fl_Text_Display</A></LI>
<LI>scrollvalue: <A href=Fl_Slider.html#Fl_Slider.scrollvalue>Fl_Slider</A></LI>
<LI>search_backward: <A HREF="Fl_Text_Buffer.html#Fl_Text_Buffer.search_backward">Fl_Text_Buffer</A></LI>
<LI>search_forward: <A HREF="Fl_Text_Buffer.html#Fl_Text_Buffer.search_forward">Fl_Text_Buffer</A></LI>

View File

@ -3,7 +3,7 @@
//
// Base Browser widget class for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2005 by Bill Spitzak and others.
// Copyright 1998-2006 by Bill Spitzak and others.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
@ -67,8 +67,20 @@ static void hscrollbar_callback(Fl_Widget* s, void*) {
((Fl_Browser_*)(s->parent()))->hposition(int(((Fl_Scrollbar*)s)->value()));
}
// Scrollbar size should be part of the Fl class, but is left here for
// binary compatibility in 1.1.x - M. Sweet
int Fl_Browser_::scrollbar_width_ = 16;
// Get the standard scrollbar size
int Fl::scrollbar_size() {
return Fl_Browser_::scrollbar_width();
}
// Set the standard scrollbar size
void Fl::scrollbar_size(int W) {
Fl_Browser_::scrollbar_width(W);
}
// return where to draw the actual box:
void Fl_Browser_::bbox(int& X, int& Y, int& W, int& H) const {
Fl_Boxtype b = box() ? box() : FL_DOWN_BOX;

View File

@ -25,7 +25,7 @@
// http://www.fltk.org/str.php
//
// generated by Fast Light User Interface Designer (fluid) version 1.0107
// generated by Fast Light User Interface Designer (fluid) version 1.0108
#include "../FL/Fl_Help_Dialog.H"
#include "flstring.h"
@ -154,72 +154,61 @@ void Fl_Help_Dialog::cb_find_(Fl_Input* o, void* v) {
}
Fl_Help_Dialog::Fl_Help_Dialog() {
Fl_Double_Window* w;
{ Fl_Double_Window* o = window_ = new Fl_Double_Window(530, 385, "Help Dialog");
w = o;
o->user_data((void*)(this));
{ Fl_Help_View* o = view_ = new Fl_Help_View(10, 10, 510, 330);
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND_COLOR);
o->selection_color(FL_SELECTION_COLOR);
o->labeltype(FL_NORMAL_LABEL);
o->labelfont(0);
o->labelsize(14);
o->labelcolor(FL_FOREGROUND_COLOR);
o->callback((Fl_Callback*)cb_view_);
o->align(FL_ALIGN_TOP);
o->when(FL_WHEN_RELEASE);
o->end();
Fl_Group::current()->resizable(o);
}
{ window_ = new Fl_Double_Window(530, 385, "Help Dialog");
window_->user_data((void*)(this));
{ view_ = new Fl_Help_View(10, 10, 510, 330);
view_->box(FL_DOWN_BOX);
view_->callback((Fl_Callback*)cb_view_);
Fl_Group::current()->resizable(view_);
} // Fl_Help_View* view_
{ Fl_Group* o = new Fl_Group(10, 348, 510, 27);
{ Fl_Button* o = new Fl_Button(456, 350, 64, 25, "Close");
o->callback((Fl_Callback*)cb_Close);
o->label(fl_close);
}
{ Fl_Button* o = back_ = new Fl_Button(386, 350, 25, 25, "@<-");
o->tooltip("Show the previous help page.");
o->shortcut(0xff51);
o->labelcolor((Fl_Color)2);
o->callback((Fl_Callback*)cb_back_);
}
{ Fl_Button* o = forward_ = new Fl_Button(421, 350, 25, 25, "@->");
o->tooltip("Show the next help page.");
o->shortcut(0xff53);
o->labelcolor((Fl_Color)2);
o->callback((Fl_Callback*)cb_forward_);
}
{ Fl_Button* o = smaller_ = new Fl_Button(316, 350, 25, 25, "F");
o->tooltip("Make the help text smaller.");
o->labelfont(1);
o->labelsize(10);
o->callback((Fl_Callback*)cb_smaller_);
}
{ Fl_Button* o = larger_ = new Fl_Button(351, 350, 25, 25, "F");
o->tooltip("Make the help text larger.");
o->labelfont(1);
o->labelsize(16);
o->callback((Fl_Callback*)cb_larger_);
}
} // Fl_Button* o
{ back_ = new Fl_Button(386, 350, 25, 25, "@<-");
back_->tooltip("Show the previous help page.");
back_->shortcut(0xff51);
back_->labelcolor((Fl_Color)2);
back_->callback((Fl_Callback*)cb_back_);
} // Fl_Button* back_
{ forward_ = new Fl_Button(421, 350, 25, 25, "@->");
forward_->tooltip("Show the next help page.");
forward_->shortcut(0xff53);
forward_->labelcolor((Fl_Color)2);
forward_->callback((Fl_Callback*)cb_forward_);
} // Fl_Button* forward_
{ smaller_ = new Fl_Button(316, 350, 25, 25, "F");
smaller_->tooltip("Make the help text smaller.");
smaller_->labelfont(1);
smaller_->labelsize(10);
smaller_->callback((Fl_Callback*)cb_smaller_);
} // Fl_Button* smaller_
{ larger_ = new Fl_Button(351, 350, 25, 25, "F");
larger_->tooltip("Make the help text larger.");
larger_->labelfont(1);
larger_->labelsize(16);
larger_->callback((Fl_Callback*)cb_larger_);
} // Fl_Button* larger_
{ Fl_Group* o = new Fl_Group(10, 350, 296, 25);
o->box(FL_DOWN_BOX);
o->color(FL_BACKGROUND2_COLOR);
{ Fl_Input* o = find_ = new Fl_Input(35, 352, 268, 21, "@search");
o->tooltip("find text in document");
o->box(FL_FLAT_BOX);
o->labelsize(13);
o->callback((Fl_Callback*)cb_find_);
o->when(FL_WHEN_ENTER_KEY_ALWAYS);
Fl_Group::current()->resizable(o);
}
{ find_ = new Fl_Input(35, 352, 268, 21, "@search");
find_->tooltip("find text in document");
find_->box(FL_FLAT_BOX);
find_->labelsize(13);
find_->callback((Fl_Callback*)cb_find_);
find_->when(FL_WHEN_ENTER_KEY_ALWAYS);
Fl_Group::current()->resizable(find_);
} // Fl_Input* find_
o->end();
Fl_Group::current()->resizable(o);
}
} // Fl_Group* o
o->end();
}
o->size_range(260, 150);
o->end();
}
} // Fl_Group* o
window_->size_range(260, 150);
window_->end();
} // Fl_Double_Window* window_
back_->deactivate();
forward_->deactivate();

View File

@ -47,7 +47,7 @@ class FL_EXPORT Fl_Help_Dialog {open
label {Help Dialog} open
private xywh {398 65 530 385} type Double resizable size_range {260 150 0 0} visible
} {
Fl_Group view_ {
Fl_Help_View view_ {
callback {if (view_->filename())
{
if (view_->changed())
@ -87,8 +87,6 @@ class FL_EXPORT Fl_Help_Dialog {open
forward_->deactivate();
}} open
private xywh {10 10 510 330} box DOWN_BOX selection_color 15 resizable
code0 {\#include <FL/Fl_Help_View.H>}
class Fl_Help_View
} {}
Fl_Group {} {open
xywh {10 348 510 27}

View File

@ -434,20 +434,21 @@ Fl_Help_View::draw()
draw_box(b, x(), y(), ww, hh, bgcolor_);
int ss = Fl::scrollbar_size();
if (hscrollbar_.visible()) {
draw_child(hscrollbar_);
hh -= 17;
hh -= ss;
i ++;
}
if (scrollbar_.visible()) {
draw_child(scrollbar_);
ww -= 17;
ww -= ss;
i ++;
}
if (i == 2) {
fl_color(FL_GRAY);
fl_rectf(x() + ww - Fl::box_dw(b) + Fl::box_dx(b),
y() + hh - Fl::box_dh(b) + Fl::box_dy(b), 17, 17);
y() + hh - Fl::box_dh(b) + Fl::box_dy(b), ss, ss);
}
if (!value_)
@ -941,13 +942,6 @@ Fl_Help_View::draw()
}
fl_pop_clip();
if (Fl::focus()==this) {
ww = w() ;
hh = h();
if (hscrollbar_.visible()) hh -= 18;
if (scrollbar_.visible()) ww -= 18;
draw_focus(box(), x(), y(), ww, hh);
}
}
@ -1775,38 +1769,47 @@ Fl_Help_View::format()
int dx = Fl::box_dw(b) - Fl::box_dx(b);
int dy = Fl::box_dh(b) - Fl::box_dy(b);
int ss = Fl::scrollbar_size();
int dw = Fl::box_dw(b) + ss;
int dh = Fl::box_dh(b);
if (hsize_ > (w() - 24)) {
if (hsize_ > (w() - dw)) {
hscrollbar_.show();
if (size_ < (h() - 24)) {
dh += ss;
if (size_ < (h() - dh)) {
scrollbar_.hide();
hscrollbar_.resize(x() + Fl::box_dx(b), y() + h() - 17 - dy, w() - Fl::box_dw(b), 17);
hscrollbar_.resize(x() + Fl::box_dx(b), y() + h() - ss - dy,
w() - Fl::box_dw(b), ss);
} else {
scrollbar_.show();
scrollbar_.resize(x() + w() - 17 - dx, y() + Fl::box_dy(b), 17, h() - 17 - Fl::box_dh(b));
hscrollbar_.resize(x() + Fl::box_dx(b), y() + h() - 17 - dy, w() - 17 - Fl::box_dw(b), 17);
scrollbar_.resize(x() + w() - ss - dx, y() + Fl::box_dy(b),
ss, h() - ss - Fl::box_dh(b));
hscrollbar_.resize(x() + Fl::box_dx(b), y() + h() - ss - dy,
w() - ss - Fl::box_dw(b), ss);
}
} else {
hscrollbar_.hide();
if (size_ < (h() - 8)) scrollbar_.hide();
if (size_ < (h() - dh)) scrollbar_.hide();
else {
scrollbar_.resize(x() + w() - 17 - dx, y() + Fl::box_dy(b), 17, h() - Fl::box_dh(b));
scrollbar_.resize(x() + w() - ss - dx, y() + Fl::box_dy(b),
ss, h() - Fl::box_dh(b));
scrollbar_.show();
}
}
// Reset scrolling if it needs to be...
if (scrollbar_.visible()) {
int temph = h() - 8;
if (hscrollbar_.visible()) temph -= 16;
int temph = h() - Fl::box_dh(box());
if (hscrollbar_.visible()) temph -= ss;
if ((topline_ + temph) > size_) topline(size_ - temph);
else topline(topline_);
} else topline(0);
if (hscrollbar_.visible()) {
int tempw = w() - 24;
int tempw = w() - ss - Fl::box_dw(box());
if ((leftline_ + tempw) > hsize_) leftline(hsize_ - tempw);
else leftline(leftline_);
} else leftline(0);
@ -2743,10 +2746,6 @@ Fl_Help_View::handle(int event) // I - Event to handle
fl_cursor(FL_CURSOR_DEFAULT);
return 1;
case FL_PUSH:
if (Fl::focus() != this) {
Fl::focus(this);
handle(FL_FOCUS);
}
if (Fl_Group::handle(event))
return 1;
linkp = find_link(xx, yy);
@ -2814,8 +2813,10 @@ Fl_Help_View::Fl_Help_View(int xx, // I - Left position
int hh, // I - Height in pixels
const char *l)
: Fl_Group(xx, yy, ww, hh, l),
scrollbar_(xx + ww - 17, yy, 17, hh - 17),
hscrollbar_(xx, yy + hh - 17, ww - 17, 17)
scrollbar_(xx + ww - Fl::scrollbar_size(), yy,
Fl::scrollbar_size(), hh - Fl::scrollbar_size()),
hscrollbar_(xx, yy + hh - Fl::scrollbar_size(),
ww - Fl::scrollbar_size(), Fl::scrollbar_size())
{
color(FL_BACKGROUND2_COLOR, FL_SELECTION_COLOR);
@ -3001,10 +3002,12 @@ Fl_Help_View::resize(int xx, // I - New left position
Fl_Widget::resize(xx, yy, ww, hh);
scrollbar_.resize(x() + w() - 17 - Fl::box_dw(b) + Fl::box_dx(b), y() + Fl::box_dy(b),
17, h() - 17 - Fl::box_dh(b));
hscrollbar_.resize(x() + Fl::box_dx(b), y() + h() - 17 - Fl::box_dh(b) + Fl::box_dy(b),
w() - 17 - Fl::box_dw(b), 17);
int ss = Fl::scrollbar_size();
scrollbar_.resize(x() + w() - ss - Fl::box_dw(b) + Fl::box_dx(b),
y() + Fl::box_dy(b), ss, h() - ss - Fl::box_dh(b));
hscrollbar_.resize(x() + Fl::box_dx(b),
y() + h() - ss - Fl::box_dh(b) + Fl::box_dy(b),
w() - ss - Fl::box_dw(b), ss);
format();
}

View File

@ -273,12 +273,12 @@ void Fl_Scroll::scrollbar_cb(Fl_Widget* o, void*) {
s->position(s->xposition(), int(((Fl_Scrollbar*)o)->value()));
}
#define SLIDER_WIDTH 16
Fl_Scroll::Fl_Scroll(int X,int Y,int W,int H,const char* L)
: Fl_Group(X,Y,W,H,L),
scrollbar(X+W-SLIDER_WIDTH,Y,SLIDER_WIDTH,H-SLIDER_WIDTH),
hscrollbar(X,Y+H-SLIDER_WIDTH,W-SLIDER_WIDTH,SLIDER_WIDTH) {
scrollbar(X+W-Fl::scrollbar_size(),Y,
Fl::scrollbar_size(),H-Fl::scrollbar_size()),
hscrollbar(X,Y+H-Fl::scrollbar_size(),
W-Fl::scrollbar_size(),Fl::scrollbar_size()) {
type(BOTH);
xposition_ = 0;
yposition_ = 0;

View File

@ -105,7 +105,7 @@ Fl_Text_Display::Fl_Text_Display(int X, int Y, int W, int H, const char* l)
end();
scrollbar_width(16);
scrollbar_width(Fl::scrollbar_size());
scrollbar_align(FL_ALIGN_BOTTOM_RIGHT);
mCursorOn = 0;

View File

@ -322,6 +322,9 @@ int Fl::reload_scheme() {
set_boxtype(FL_THIN_DOWN_BOX, FL_PLASTIC_THIN_DOWN_BOX);
set_boxtype(_FL_ROUND_UP_BOX, FL_PLASTIC_ROUND_UP_BOX);
set_boxtype(_FL_ROUND_DOWN_BOX, FL_PLASTIC_ROUND_DOWN_BOX);
// Use standard size scrollbars...
Fl::scrollbar_size(16);
} else if (scheme_ && !strcasecmp(scheme_, "gtk+")) {
// Use a GTK+ inspired look-n-feel...
if (scheme_bg_) {
@ -340,6 +343,9 @@ int Fl::reload_scheme() {
set_boxtype(FL_THIN_DOWN_BOX, FL_GTK_THIN_DOWN_BOX);
set_boxtype(_FL_ROUND_UP_BOX, FL_GTK_ROUND_UP_BOX);
set_boxtype(_FL_ROUND_DOWN_BOX, FL_GTK_ROUND_DOWN_BOX);
// Use slightly thinner scrollbars...
Fl::scrollbar_size(15);
} else {
// Use the standard FLTK look-n-feel...
if (scheme_bg_) {
@ -358,6 +364,9 @@ int Fl::reload_scheme() {
set_boxtype(FL_THIN_DOWN_BOX, fl_thin_down_box, 1, 1, 2, 2);
set_boxtype(_FL_ROUND_UP_BOX, fl_round_up_box, 3, 3, 6, 6);
set_boxtype(_FL_ROUND_DOWN_BOX, fl_round_down_box, 3, 3, 6, 6);
// Use standard size scrollbars...
Fl::scrollbar_size(16);
}
// Set (or clear) the background tile for all windows...