summaryrefslogtreecommitdiff
path: root/fluid/Fl_Window_Type.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'fluid/Fl_Window_Type.cxx')
-rw-r--r--fluid/Fl_Window_Type.cxx78
1 files changed, 50 insertions, 28 deletions
diff --git a/fluid/Fl_Window_Type.cxx b/fluid/Fl_Window_Type.cxx
index 497938698..ee7a51e35 100644
--- a/fluid/Fl_Window_Type.cxx
+++ b/fluid/Fl_Window_Type.cxx
@@ -614,33 +614,31 @@ void Fl_Window_Type::draw_overlay() {
// - check for distance to the window edge
// * FLTK suggests 10 pixels from the edge
int d;
- int xsp, xdl, ydl, ysp;
+ int xsp, ysp;
ideal_spacing(xsp, ysp);
- xdl = (xsp + 1) / 2;
- ydl = (ysp + 1) / 2;
if (drag & DRAG) {
- if (abs(d = ysp - myby) < ydl) {
+ if (abs(d = ysp - myby) < 5) {
dy += d;
mybt += d;
myby = ysp;
draw_v_arrow(mybx+5, myby, 0);
}
- if (abs(d = o->h() - ysp - mybt) < ydl) {
+ if (abs(d = o->h() - ysp - mybt) < 5) {
dy += d;
myby += d;
mybt = o->h()- ysp;
draw_v_arrow(mybx+5, mybt, o->h());
}
- if (abs(d = xsp - mybx) < xdl) {
+ if (abs(d = xsp - mybx) < 5) {
dx += d;
mybr += d;
mybx = xsp;
draw_h_arrow(mybx, myby+5, 0);
}
- if (abs(d = o->w() - xsp - mybr) < xdl) {
+ if (abs(d = o->w() - xsp - mybr) < 5) {
dx += d;
mybx += d;
mybr = o->w()- xsp;
@@ -649,12 +647,11 @@ void Fl_Window_Type::draw_overlay() {
} else if (numselected==1 && selection) {
// check for FLTK preferred sizes
Fl_Widget_Type *mysel = (Fl_Widget_Type *)selection;
- int iw, ih;
-
- mysel->ideal_size(iw, ih);
-
int w = mybr-mybx;
int h = mybt-myby;
+ int iw = w, ih = h;
+
+ mysel->ideal_size(iw, ih);
if (abs(d = h-ih) < 4) {
mybt = myby + ih;
@@ -689,21 +686,49 @@ void Fl_Window_Type::draw_overlay() {
if (!qw->o->visible_r()) continue;
qw->ideal_spacing(xsp, ysp);
- xdl = (xsp + 1) / 2;
- ydl = (ysp + 1) / 2;
// - check horizontal and vertical alignment with other widgets
- if (abs(myby - qw->o->y()) < 3) draw_top_brace(qw->o);
- if (abs(mybx - qw->o->x()) < 3) draw_left_brace(qw->o);
- if (abs(mybr - qw->o->x() - qw->o->w()) < 3) draw_right_brace(qw->o);
- if (abs(mybt - qw->o->y() - qw->o->h()) < 3) draw_bottom_brace(qw->o);
+ if (abs(d = qw->o->y() - myby) < 5) {
+ if (drag & (TOP | DRAG)) dy += d;
+ else dy -= d;
+
+ myby += d;
+ mybt += d;
+
+ draw_top_brace(qw->o);
+ }
+ if (abs(d = qw->o->x() - mybx) < 5) {
+ if (drag & (LEFT | DRAG)) dx += d;
+ else dx -= d;
+
+ mybx += d;
+ mybr += d;
+
+ draw_left_brace(qw->o);
+ }
+ if (abs(d = qw->o->x() + qw->o->w() - mybr) < 5) {
+ if (drag & (LEFT | DRAG)) dx += d;
+ else dx -= d;
+
+ mybx += d;
+ mybr += d;
+
+ draw_right_brace(qw->o);
+ }
+ if (abs(d = qw->o->y() + qw->o->h() - mybt) < 5) {
+ if (drag & (TOP | DRAG)) dy += d;
+ else dy -= d;
+
+ myby += d;
+ mybt += d;
+
+ draw_bottom_brace(qw->o);
+ }
// - check distances between widgets
- // * horizontal and vertical widget to widget is 10 pixels
- if (qw->o->y()>=myby && qw->o->y()<mybt) {
+ if ((qw->o->y()+qw->o->h())>=myby && qw->o->y()<=mybt) {
// Compare left of selected to right of current
- int xx = mybx - (qw->o->x()+qw->o->w());
- if (abs(d = xx-xsp) < xdl) {
+ if (abs(d = xsp - (mybx - qw->o->x() - qw->o->w())) < 5) {
if (drag & (LEFT | DRAG)) dx += d;
else dx -= d;
@@ -714,8 +739,7 @@ void Fl_Window_Type::draw_overlay() {
draw_h_arrow(mybx, (myby+mybt)/2, qw->o->x()+qw->o->w());
} else {
// Compare right of selected to left of current
- xx = qw->o->x() - mybr;
- if (abs(d = xx-xsp) < xdl) {
+ if (abs(d = xsp - (qw->o->x() - mybr)) < 5) {
if (drag & (LEFT | DRAG)) dx += d;
else dx -= d;
@@ -728,10 +752,9 @@ void Fl_Window_Type::draw_overlay() {
}
}
- if (qw->o->x()>=mybx && qw->o->x()<mybr) {
+ if ((qw->o->x()+qw->o->w())>=mybx && qw->o->x()<=mybr) {
// Compare top of selected to bottom of current
- int yy = myby - (qw->o->y()+qw->o->h());
- if (abs(d = yy-ysp) < ydl) {
+ if (abs(d = ysp - (myby - qw->o->y() - qw->o->h())) < 5) {
if (drag & (TOP | DRAG)) dy += d;
else dy -= d;
@@ -742,8 +765,7 @@ void Fl_Window_Type::draw_overlay() {
draw_v_arrow((mybx+mybr)/2, myby, qw->o->y()+qw->o->h());
} else {
// Compare bottom of selected to top of current
- yy = qw->o->y() - mybt;
- if (abs(d = yy-ydl) < ydl) {
+ if (abs(d = ysp - (qw->o->y() - mybt)) < 5) {
if (drag & (TOP | DRAG)) dy += d;
else dy -= d;