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

Reply via email to