Author: matt
Date: 2012-05-02 14:02:21 -0700 (Wed, 02 May 2012)
New Revision: 9435
Log:
Fixed fltk3::Browser_
Modified:
branches/branch-3.0/include/fltk3/ScrollGroup.h
branches/branch-3.0/src/fltk3/Browser_.cxx
branches/branch-3.0/src/fltk3/ScrollGroup.cxx
branches/branch-3.0/src/fltk3/Scrollbar.cxx
branches/branch-3.0/test/browser.cxx
Modified: branches/branch-3.0/include/fltk3/ScrollGroup.h
===================================================================
--- branches/branch-3.0/include/fltk3/ScrollGroup.h 2012-05-02 20:30:12 UTC
(rev 9434)
+++ branches/branch-3.0/include/fltk3/ScrollGroup.h 2012-05-02 21:02:21 UTC
(rev 9435)
@@ -31,6 +31,7 @@
#ifndef Fltk3_Scroll_H
#define Fltk3_Scroll_H
+
#include "Group.h"
#include "Scrollbar.h"
@@ -97,7 +98,7 @@
scrollbars and neighboring objects.</I>
*/
class FLTK3_EXPORT ScrollGroup : public fltk3::Group {
-
+
int xposition_, yposition_;
int oldx, oldy;
int scrollbar_size_;
Modified: branches/branch-3.0/src/fltk3/Browser_.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/Browser_.cxx 2012-05-02 20:30:12 UTC (rev
9434)
+++ branches/branch-3.0/src/fltk3/Browser_.cxx 2012-05-02 21:02:21 UTC (rev
9435)
@@ -78,10 +78,14 @@
void fltk3::Browser_::bbox(int& X, int& Y, int& W, int& H) const {
int scrollsize = scrollbar_size_ ? scrollbar_size_ : fltk3::scrollbar_size();
fltk3::Boxtype b = box() ? box() : fltk3::DOWN_BOX;
- X = x()+fltk3::box_dx(b);
- Y = y()+fltk3::box_dy(b);
+ X = fltk3::box_dx(b);
+ Y = fltk3::box_dy(b);
W = w()-fltk3::box_dw(b);
H = h()-fltk3::box_dh(b);
+ if (is_window_relative()) {
+ X += x();
+ Y += y();
+ }
if (scrollbar.visible()) {
W -= scrollsize;
if (scrollbar.align() & fltk3::ALIGN_LEFT) X += scrollsize;
@@ -342,10 +346,15 @@
int full_height_ = full_height();
int X, Y, W, H; bbox(X, Y, W, H);
int dont_repeat = 0;
+ int xo = 0, yo = 0;
+ if (is_window_relative()) {
+ xo += x();
+ yo += y();
+ }
J1:
if (damage() & fltk3::DAMAGE_ALL) { // redraw the box if full redraw
fltk3::Boxtype b = box() ? box() : fltk3::DOWN_BOX;
- draw_box(b, x(), y(), w(), h(), color());
+ draw_box(b, xo, yo, w(), h(), color());
drawsquare = 1;
}
// see if scrollbar needs to be switched on/off:
@@ -413,7 +422,7 @@
fltk3::rectf(X, yy+Y, W, hh);
} else if (!(damage()&fltk3::DAMAGE_ALL)) {
fltk3::push_clip(X, yy+Y, W, hh);
- draw_box(box() ? box() : fltk3::DOWN_BOX, x(), y(), w(), h(), color());
+ draw_box(box() ? box() : fltk3::DOWN_BOX, xo, yo, w(), h(), color());
fltk3::pop_clip();
}
item_draw(l, X-hposition_, yy+Y, W+hposition_, hh);
@@ -429,7 +438,7 @@
// erase the area below last line:
if (!(damage()&fltk3::DAMAGE_ALL) && yy < H) {
fltk3::push_clip(X, yy+Y, W, H-yy);
- draw_box(box() ? box() : fltk3::DOWN_BOX, x(), y(), w(), h(), color());
+ draw_box(box() ? box() : fltk3::DOWN_BOX, xo, yo, w(), h(), color());
fltk3::pop_clip();
}
fltk3::pop_clip();
@@ -959,9 +968,10 @@
*/
fltk3::Browser_::Browser_(int X, int Y, int W, int H, const char* L)
: fltk3::Group(X, Y, W, H, L),
-scrollbar(0, 0, 0, 0, 0), // they will be resized by draw()
-hscrollbar(0, 0, 0, 0, 0)
+ scrollbar(0, 0, 0, 0, 0), // they will be resized by draw()
+ hscrollbar(0, 0, 0, 0, 0)
{
+ set_group_relative();
box(fltk3::NO_BOX);
align(fltk3::ALIGN_BOTTOM);
position_ = real_position_ = 0;
Modified: branches/branch-3.0/src/fltk3/ScrollGroup.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/ScrollGroup.cxx 2012-05-02 20:30:12 UTC
(rev 9434)
+++ branches/branch-3.0/src/fltk3/ScrollGroup.cxx 2012-05-02 21:02:21 UTC
(rev 9435)
@@ -3,7 +3,7 @@
//
// Scroll widget for the Fast Light Tool Kit (FLTK).
//
-// Copyright 1998-2010 by Bill Spitzak and others.
+// Copyright 1998-2012 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
@@ -396,11 +396,12 @@
that it is destroyed last.
*/
fltk3::ScrollGroup::ScrollGroup(int X,int Y,int W,int H,const char* L)
- : fltk3::Group(X,Y,W,H,L),
- scrollbar(X+W-fltk3::scrollbar_size(),Y,
- fltk3::scrollbar_size(),H-fltk3::scrollbar_size()),
- hscrollbar(X,Y+H-fltk3::scrollbar_size(),
- W-fltk3::scrollbar_size(),fltk3::scrollbar_size()) {
+: fltk3::Group(X,Y,W,H,L),
+ scrollbar(X+W-fltk3::scrollbar_size(),Y,
+ fltk3::scrollbar_size(),H-fltk3::scrollbar_size()),
+ hscrollbar(X,Y+H-fltk3::scrollbar_size(),
+ W-fltk3::scrollbar_size(),fltk3::scrollbar_size())
+{
type(BOTH);
xposition_ = oldx = 0;
yposition_ = oldy = 0;
Modified: branches/branch-3.0/src/fltk3/Scrollbar.cxx
===================================================================
--- branches/branch-3.0/src/fltk3/Scrollbar.cxx 2012-05-02 20:30:12 UTC (rev
9434)
+++ branches/branch-3.0/src/fltk3/Scrollbar.cxx 2012-05-02 21:02:21 UTC (rev
9435)
@@ -32,10 +32,13 @@
#include <math.h>
#include "flstring.h"
+
#define INITIALREPEAT .5
#define REPEAT .05
-void fltk3::Scrollbar::increment_cb() {
+
+void fltk3::Scrollbar::increment_cb()
+{
char inv = maximum()<minimum();
int ls = inv ? -linesize_ : linesize_;
int i;
@@ -66,24 +69,28 @@
handle_drag(clamp(value() + i));
}
-void fltk3::Scrollbar::timeout_cb(void* v) {
+
+void fltk3::Scrollbar::timeout_cb(void* v)
+{
fltk3::Scrollbar* s = (fltk3::Scrollbar*)v;
s->increment_cb();
fltk3::add_timeout(REPEAT, timeout_cb, s);
}
-int fltk3::Scrollbar::handle(int event) {
+
+int fltk3::Scrollbar::handle(int event)
+{
// area of scrollbar:
int area;
- int X=x(); int Y=y(); int W=w(); int H=h();
-
+ int X=0; int Y=0; int W=w(); int H=h();
+
// adjust slider area to be inside the arrow buttons:
if (horizontal()) {
if (W >= 3*H) {X += H; W -= 2*H;}
} else {
if (H >= 3*W) {Y += W; H -= 2*W;}
}
-
+
// which widget part is highlighted?
int relx;
int ww;
@@ -102,7 +109,7 @@
if (type()==fltk3::VERT_NICE_SLIDER || type()==fltk3::HOR_NICE_SLIDER) T
+= 4;
if (S < T) S = T;
double val =
- (maximum()-minimum()) ? (value()-minimum())/(maximum()-minimum()) : 0.5;
+ (maximum()-minimum()) ? (value()-minimum())/(maximum()-minimum()) : 0.5;
int sliderx;
if (val >= 1.0) sliderx = ww-S;
else if (val <= 0.0) sliderx = 0;
@@ -112,104 +119,106 @@
else if (relx >= sliderx+S) area = 6;
else area = 8;
}
-
+
switch (event) {
- case fltk3::ENTER:
- case fltk3::LEAVE:
- return 1;
- case fltk3::RELEASE:
+ case fltk3::ENTER:
+ case fltk3::LEAVE:
+ return 1;
+ case fltk3::RELEASE:
damage(fltk3::DAMAGE_ALL);
- if (pushed_) {
- fltk3::remove_timeout(timeout_cb, this);
- pushed_ = 0;
- }
- handle_release();
- return 1;
- case fltk3::PUSH:
- if (pushed_) return 1;
- if (area != 8) pushed_ = area;
- if (pushed_) {
- handle_push();
- fltk3::add_timeout(INITIALREPEAT, timeout_cb, this);
- increment_cb();
- damage(fltk3::DAMAGE_ALL);
+ if (pushed_) {
+ fltk3::remove_timeout(timeout_cb, this);
+ pushed_ = 0;
+ }
+ handle_release();
return 1;
- }
- return Slider::handle(event, X,Y,W,H);
- case fltk3::DRAG:
- if (pushed_) return 1;
- return Slider::handle(event, X,Y,W,H);
- case fltk3::MOUSEWHEEL :
- if (horizontal()) {
- if (fltk3::e_dx==0) return 0;
+ case fltk3::PUSH:
+ if (pushed_) return 1;
+ if (area != 8) pushed_ = area;
+ if (pushed_) {
+ handle_push();
+ fltk3::add_timeout(INITIALREPEAT, timeout_cb, this);
+ increment_cb();
+ damage(fltk3::DAMAGE_ALL);
+ return 1;
+ }
+ return Slider::handle(event, X,Y,W,H);
+ case fltk3::DRAG:
+ if (pushed_) return 1;
+ return Slider::handle(event, X,Y,W,H);
+ case fltk3::MOUSEWHEEL :
+ if (horizontal()) {
+ if (fltk3::e_dx==0) return 0;
+ int ls = maximum()>=minimum() ? linesize_ : -linesize_;
+ handle_drag(clamp(value() + ls * fltk3::e_dx));
+ return 1;
+ } else {
+ if (fltk3::e_dy==0) return 0;
+ int ls = maximum()>=minimum() ? linesize_ : -linesize_;
+ handle_drag(clamp(value() + ls * fltk3::e_dy));
+ return 1;
+ }
+ case fltk3::SHORTCUT:
+ case fltk3::KEYBOARD: {
+ int v = value();
int ls = maximum()>=minimum() ? linesize_ : -linesize_;
- handle_drag(clamp(value() + ls * fltk3::e_dx));
- return 1;
- } else {
- if (fltk3::e_dy==0) return 0;
- int ls = maximum()>=minimum() ? linesize_ : -linesize_;
- handle_drag(clamp(value() + ls * fltk3::e_dy));
- return 1;
- }
- case fltk3::SHORTCUT:
- case fltk3::KEYBOARD: {
- int v = value();
- int ls = maximum()>=minimum() ? linesize_ : -linesize_;
- if (horizontal()) {
- switch (fltk3::event_key()) {
- case fltk3::LeftKey:
- v -= ls;
- break;
- case fltk3::RightKey:
- v += ls;
- break;
- default:
- return 0;
+ if (horizontal()) {
+ switch (fltk3::event_key()) {
+ case fltk3::LeftKey:
+ v -= ls;
+ break;
+ case fltk3::RightKey:
+ v += ls;
+ break;
+ default:
+ return 0;
+ }
+ } else { // vertical
+ switch (fltk3::event_key()) {
+ case fltk3::UpKey:
+ v -= ls;
+ break;
+ case fltk3::DownKey:
+ v += ls;
+ break;
+ case fltk3::PageUpKey:
+ if (slider_size() >= 1.0) return 0;
+ v -= int((maximum()-minimum())*slider_size()/(1.0-slider_size()));
+ v += ls;
+ break;
+ case fltk3::PageDownKey:
+ if (slider_size() >= 1.0) return 0;
+ v += int((maximum()-minimum())*slider_size()/(1.0-slider_size()));
+ v -= ls;
+ break;
+ case fltk3::HomeKey:
+ v = int(minimum());
+ break;
+ case fltk3::EndKey:
+ v = int(maximum());
+ break;
+ default:
+ return 0;
+ }
}
- } else { // vertical
- switch (fltk3::event_key()) {
- case fltk3::UpKey:
- v -= ls;
- break;
- case fltk3::DownKey:
- v += ls;
- break;
- case fltk3::PageUpKey:
- if (slider_size() >= 1.0) return 0;
- v -= int((maximum()-minimum())*slider_size()/(1.0-slider_size()));
- v += ls;
- break;
- case fltk3::PageDownKey:
- if (slider_size() >= 1.0) return 0;
- v += int((maximum()-minimum())*slider_size()/(1.0-slider_size()));
- v -= ls;
- break;
- case fltk3::HomeKey:
- v = int(minimum());
- break;
- case fltk3::EndKey:
- v = int(maximum());
- break;
- default:
- return 0;
+ v = int(clamp(v));
+ if (v != value()) {
+ Slider::value(v);
+ value_damage();
+ set_changed();
+ do_callback();
}
- }
- v = int(clamp(v));
- if (v != value()) {
- Slider::value(v);
- value_damage();
- set_changed();
- do_callback();
- }
- return 1;}
+ return 1;}
}
return 0;
}
-void fltk3::Scrollbar::draw() {
+
+void fltk3::Scrollbar::draw()
+{
if (damage()&fltk3::DAMAGE_ALL) draw_box();
- int X = x()+fltk3::box_dx(box());
- int Y = y()+fltk3::box_dy(box());
+ int X = fltk3::box_dx(box());
+ int Y = fltk3::box_dy(box());
int W = w()-fltk3::box_dw(box());
int H = h()-fltk3::box_dh(box());
if (horizontal()) {
@@ -266,12 +275,15 @@
}
}
+
/**
- Creates a new fltk3::Scrollbar widget with given position, size, and label.
- You need to do type(fltk3::HORIZONTAL) if you want a horizontal scrollbar.
-*/
+ Creates a new fltk3::Scrollbar widget with given position, size, and label.
+ You need to do type(fltk3::HORIZONTAL) if you want a horizontal scrollbar.
+ */
fltk3::Scrollbar::Scrollbar(int X, int Y, int W, int H, const char* L)
- : fltk3::Slider(X, Y, W, H, L) {
+: fltk3::Slider(X, Y, W, H, L)
+{
+ set_group_relative();
box(fltk3::FLAT_BOX);
color(fltk3::DARK2);
slider(fltk3::UP_BOX);
@@ -280,8 +292,10 @@
step(1);
}
+
/** Destroys the Scrollbar. */
-fltk3::Scrollbar::~Scrollbar() {
+fltk3::Scrollbar::~Scrollbar()
+{
if (pushed_)
fltk3::remove_timeout(timeout_cb, this);
}
Modified: branches/branch-3.0/test/browser.cxx
===================================================================
--- branches/branch-3.0/test/browser.cxx 2012-05-02 20:30:12 UTC (rev
9434)
+++ branches/branch-3.0/test/browser.cxx 2012-05-02 21:02:21 UTC (rev
9435)
@@ -127,7 +127,7 @@
if (!fltk3::args(argc,argv,i)) fltk3::fatal(fltk3::help);
const char* fname = (i < argc) ? argv[i] : "browser.cxx";
fltk3::DoubleWindow window(480,400,fname);
- browser = new fltk3::SelectBrowser(0,0,480,350,0);
+ browser = new fltk3::SelectBrowser(10,10,460,330,0);
browser->type(fltk3::MULTI_BROWSER);
//browser->type(fltk3::HOLD_BROWSER);
//browser->color(42);
@@ -152,7 +152,8 @@
strcpy(buf, argv[0]);
char *slash = strrchr(buf, '/');
if (slash)
- strcpy(slash, "/../Resources/browser.cxx");
+ //strcpy(slash, "/../Resources/browser.cxx");
+ strcpy(buf, "/Users/matt/dev/fltk-3.0.0/test/browser.cxx");
done = browser->load(buf);
}
#endif
_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit