All widget coordinates are now 32 bit. Beware though, on a 16 bit graphics system, line drawing and window positioning is still messed up for coordinates beyond 16 bit. See STR #1929.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6112 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Matthias Melcher 2008-04-23 15:07:13 +00:00
parent 8683ea2c81
commit 88c0d727aa
6 changed files with 19 additions and 17 deletions

View File

@ -1,5 +1,6 @@
CHANGES IN FLTK 1.3.0
- changed widget coordinates to 32 bit
- added support for shortcuts for Fl_Input_,
Fl_Value_Input, and Fl_Text_Display derived
widgets (STR #1770)

View File

@ -38,7 +38,7 @@ class FL_EXPORT Fl_Group : public Fl_Widget {
Fl_Widget* savedfocus_;
Fl_Widget* resizable_;
int children_;
short *sizes_; // remembered initial sizes of children
int *sizes_; // remembered initial sizes of children
int navigation(int);
static Fl_Group *current_;
@ -58,7 +58,7 @@ protected:
void draw_children();
void draw_outside_label(const Fl_Widget&) const ;
void update_child(Fl_Widget&) const;
short* sizes();
int *sizes();
public:

View File

@ -58,7 +58,7 @@ class FL_EXPORT Fl_Widget {
Fl_Group* parent_;
Fl_Callback* callback_;
void* user_data_;
short x_,y_,w_,h_;
int x_,y_,w_,h_;
Fl_Label label_;
int flags_;
unsigned color_;
@ -79,10 +79,10 @@ protected:
Fl_Widget(int,int,int,int,const char* =0);
void x(int v) {x_ = (short)v;}
void y(int v) {y_ = (short)v;}
void w(int v) {w_ = (short)v;}
void h(int v) {h_ = (short)v;}
void x(int v) {x_ = v;}
void y(int v) {y_ = v;}
void w(int v) {w_ = v;}
void h(int v) {h_ = v;}
int flags() const {return flags_;}
void set_flag(int c) {flags_ |= c;}

View File

@ -44,8 +44,9 @@ class FL_EXPORT Fl_Window : public Fl_Group {
const char* xclass_;
const void* icon_;
// size_range stuff:
short minw, minh, maxw, maxh;
uchar dw, dh, aspect, size_range_set;
int minw, minh, maxw, maxh;
int dw, dh, aspect;
uchar size_range_set;
// cursor stuff
Fl_Cursor cursor_default;
Fl_Color cursor_fg, cursor_bg;
@ -94,7 +95,7 @@ public:
void hotspot(const Fl_Widget& p, int offscreen = 0) {hotspot(&p,offscreen);}
void free_position() {clear_flag(FL_FORCE_POSITION);}
void size_range(int a, int b, int c=0, int d=0, int e=0, int f=0, int g=0) {
minw=(short)a; minh=(short)b; maxw=(short)c; maxh=(short)d; dw=(uchar)e; dh=(uchar)f; aspect=(uchar)g; size_range_();}
minw=a; minh=b; maxw=c; maxh=d; dw=e; dh=f; aspect=g; size_range_();}
const char* label() const {return Fl_Widget::label();}
const char* iconlabel() const {return iconlabel_;}

View File

@ -428,9 +428,9 @@ void Fl_Group::init_sizes() {
delete[] sizes_; sizes_ = 0;
}
short* Fl_Group::sizes() {
int *Fl_Group::sizes() {
if (!sizes_) {
short* p = sizes_ = new short[4*(children_+2)];
int *p = sizes_ = new int[4*(children_+2)];
// first thing in sizes array is the group's size:
if (type() < FL_WINDOW) {p[0] = x(); p[2] = y();} else {p[0] = p[2] = 0;}
p[1] = p[0]+w(); p[3] = p[2]+h();
@ -477,7 +477,7 @@ void Fl_Group::resize(int X, int Y, int W, int H) {
} else if (children_) {
short* p = sizes();
int *p = sizes();
// get changes in size/position from the initial size:
int dx = X - p[0];

View File

@ -39,7 +39,7 @@
void Fl_Tile::position(int oix, int oiy, int newx, int newy) {
Fl_Widget*const* a = array();
short* p = sizes();
int *p = sizes();
p += 8; // skip group & resizable's saved size
for (int i=children(); i--; p += 4) {
Fl_Widget* o = *a++;
@ -73,7 +73,7 @@ void Fl_Tile::resize(int X,int Y,int W,int H) {
int dy = Y-y();
int dw = W-w();
int dh = H-h();
short* p = sizes();
int *p = sizes();
// resize this (skip the Fl_Group resize):
Fl_Widget::resize(X,Y,W,H);
// find bottom-right of resiable:
@ -138,8 +138,8 @@ int Fl_Tile::handle(int event) {
int oldx = 0;
int oldy = 0;
Fl_Widget*const* a = array();
short* q = sizes();
short* p = q+8;
int *q = sizes();
int *p = q+8;
for (int i=children(); i--; p += 4) {
Fl_Widget* o = *a++;
if (o == resizable()) continue;