summaryrefslogtreecommitdiffstats
path: root/contrib/fltk/10-str2860-fltk-1.3.x-screen_num.patch
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/fltk/10-str2860-fltk-1.3.x-screen_num.patch')
-rw-r--r--contrib/fltk/10-str2860-fltk-1.3.x-screen_num.patch131
1 files changed, 131 insertions, 0 deletions
diff --git a/contrib/fltk/10-str2860-fltk-1.3.x-screen_num.patch b/contrib/fltk/10-str2860-fltk-1.3.x-screen_num.patch
new file mode 100644
index 00000000..c157af61
--- /dev/null
+++ b/contrib/fltk/10-str2860-fltk-1.3.x-screen_num.patch
@@ -0,0 +1,131 @@
+diff -up fltk-1.3.0r9619/FL/Fl.H.screen_num fltk-1.3.0r9619/FL/Fl.H
+--- fltk-1.3.0r9619/FL/Fl.H.screen_num 2012-07-03 13:49:28.663085580 +0200
++++ fltk-1.3.0r9619/FL/Fl.H 2012-07-03 13:49:28.731084402 +0200
+@@ -806,6 +806,8 @@ public:
+ static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my);
+ static void screen_xywh(int &X, int &Y, int &W, int &H, int n);
+ static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh);
++ static int screen_num(int x, int y);
++ static int screen_num(int x, int y, int w, int h);
+ static void screen_dpi(float &h, float &v, int n=0);
+ static void screen_work_area(int &X, int &Y, int &W, int &H, int mx, int my);
+ static void screen_work_area(int &X, int &Y, int &W, int &H, int n);
+diff -up fltk-1.3.0r9619/src/screen_xywh.cxx.screen_num fltk-1.3.0r9619/src/screen_xywh.cxx
+--- fltk-1.3.0r9619/src/screen_xywh.cxx.screen_num 2012-03-23 17:47:53.000000000 +0100
++++ fltk-1.3.0r9619/src/screen_xywh.cxx 2012-07-03 13:58:01.947195396 +0200
+@@ -215,21 +215,6 @@ int Fl::screen_count() {
+ return num_screens ? num_screens : 1;
+ }
+
+-static int find_screen_with_point(int mx, int my) {
+- int screen = 0;
+- if (num_screens < 0) screen_init();
+-
+- for (int i = 0; i < num_screens; i ++) {
+- int sx, sy, sw, sh;
+- Fl::screen_xywh(sx, sy, sw, sh, i);
+- if ((mx >= sx) && (mx < (sx+sw)) && (my >= sy) && (my < (sy+sh))) {
+- screen = i;
+- break;
+- }
+- }
+- return screen;
+-}
+-
+ /**
+ Gets the bounding box of a screen
+ that contains the specified screen position \p mx, \p my
+@@ -237,7 +222,7 @@ static int find_screen_with_point(int mx
+ \param[in] mx, my the absolute screen position
+ */
+ void Fl::screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my) {
+- screen_xywh(X, Y, W, H, find_screen_with_point(mx, my));
++ screen_xywh(X, Y, W, H, screen_num(mx, my));
+ }
+
+
+@@ -248,7 +233,7 @@ void Fl::screen_xywh(int &X, int &Y, int
+ \param[in] mx, my the absolute screen position
+ */
+ void Fl::screen_work_area(int &X, int &Y, int &W, int &H, int mx, int my) {
+- screen_work_area(X, Y, W, H, find_screen_with_point(mx, my));
++ screen_work_area(X, Y, W, H, screen_num(mx, my));
+ }
+
+ /**
+@@ -321,6 +306,38 @@ void Fl::screen_xywh(int &X, int &Y, int
+ #endif // WIN32
+ }
+
++/**
++ Gets the screen bounding rect for the screen
++ which intersects the most with the rectangle
++ defined by \p mx, \p my, \p mw, \p mh.
++ \param[out] X,Y,W,H the corresponding screen bounding box
++ \param[in] mx, my, mw, mh the rectangle to search for intersection with
++ \see void screen_xywh(int &X, int &Y, int &W, int &H, int n)
++ */
++void Fl::screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh) {
++ screen_xywh(X, Y, W, H, screen_num(mx, my, mw, mh));
++}
++
++/**
++ Gets the screen number of a screen
++ that contains the specified screen position \p x, \p y
++ \param[in] x, y the absolute screen position
++*/
++int Fl::screen_num(int x, int y) {
++ int screen = 0;
++ if (num_screens < 0) screen_init();
++
++ for (int i = 0; i < num_screens; i ++) {
++ int sx, sy, sw, sh;
++ Fl::screen_xywh(sx, sy, sw, sh, i);
++ if ((x >= sx) && (x < (sx+sw)) && (y >= sy) && (y < (sy+sh))) {
++ screen = i;
++ break;
++ }
++ }
++ return screen;
++}
++
+ static inline float fl_intersection(int x1, int y1, int w1, int h1,
+ int x2, int y2, int w2, int h2) {
+ if(x1+w1 < x2 || x2+w2 < x1 || y1+h1 < y2 || y2+h2 < y1)
+@@ -333,30 +350,27 @@ static inline float fl_intersection(int
+ }
+
+ /**
+- Gets the screen bounding rect for the screen
++ Gets the screen number for the screen
+ which intersects the most with the rectangle
+- defined by \p mx, \p my, \p mw, \p mh.
+- \param[out] X,Y,W,H the corresponding screen bounding box
+- \param[in] mx, my, mw, mh the rectangle to search for intersection with
+- \see void screen_xywh(int &X, int &Y, int &W, int &H, int n)
++ defined by \p x, \p y, \p w, \p h.
++ \param[in] x, y, w, h the rectangle to search for intersection with
+ */
+-void Fl::screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh) {
++int Fl::screen_num(int x, int y, int w, int h) {
+ int best_screen = 0;
+ float best_intersection = 0.;
+ for(int i = 0; i < Fl::screen_count(); i++) {
+ int sx, sy, sw, sh;
+ Fl::screen_xywh(sx, sy, sw, sh, i);
+- float sintersection = fl_intersection(mx, my, mw, mh, sx, sy, sw, sh);
++ float sintersection = fl_intersection(x, y, w, h, sx, sy, sw, sh);
+ if(sintersection > best_intersection) {
+ best_screen = i;
+ best_intersection = sintersection;
+ }
+ }
+- screen_xywh(X, Y, W, H, best_screen);
++ return best_screen;
+ }
+
+
+-
+ /**
+ Gets the screen resolution in dots-per-inch for the given screen.
+ \param[out] h, v horizontal and vertical resolution