diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2023-03-14 11:50:44 +0100 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2023-03-14 11:50:44 +0100 |
| commit | add43cd3fcd12238042587683cdbee96430ed1e0 (patch) | |
| tree | 68298788e7afee8bdd7798465ff5c63cc12c877a /src/drivers | |
| parent | 16448d5ba85c7e75d77b812fb1dd0d09023f4cf4 (diff) | |
Wayland: add support for multiple high or low DPI displays - cont'd
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/Wayland/Fl_Wayland_Screen_Driver.H | 2 | ||||
| -rw-r--r-- | src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx | 33 |
2 files changed, 7 insertions, 28 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.H b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.H index 637cd02b7..6aaea6af5 100644 --- a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.H +++ b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.H @@ -171,10 +171,8 @@ public: int get_key(int k) FL_OVERRIDE; // Wayland-specific member functions - int get_mouse_unscaled(int &xx, int &yy); void screen_count_set(int count) {num_screens = count;} void reset_cursor(); - int screen_num_unscaled(int x, int y); // this one is in fl_wayland_clipboard_dnd.cxx void copy_image(const unsigned char* data, int W, int H); void init_workarea(); diff --git a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx index 2bb7a5ceb..2cfe17407 100644 --- a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx +++ b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx @@ -1411,23 +1411,6 @@ void Fl_Wayland_Screen_Driver::offscreen_size(Fl_Offscreen off_, int &width, int height = off->data_size / off->stride; } -//NOTICE: returns -1 if x,y is not in any screen -int Fl_Wayland_Screen_Driver::screen_num_unscaled(int x, int y) -{ - if (num_screens < 0) init(); - - Fl_Wayland_Screen_Driver::output *output; - int screen = 0; - wl_list_for_each(output, &outputs, link) { - int s = output->wld_scale; - int sx = 0, sy = 0, sw = output->width/s, sh = output->height/s; - if ((x >= sx) && (x < (sx+sw)) && (y >= sy) && (y < (sy+sh))) { - return screen; - } - screen++; - } - return -1; -} float Fl_Wayland_Screen_Driver::scale(int n) { Fl_Wayland_Screen_Driver::output *output; @@ -1492,19 +1475,17 @@ struct xkb_keymap *Fl_Wayland_Screen_Driver::get_xkb_keymap() { } -int Fl_Wayland_Screen_Driver::get_mouse_unscaled(int &mx, int &my) { - open_display(); - mx = Fl::e_x_root; my = Fl::e_y_root; - int screen = screen_num_unscaled(mx, my); - return screen >= 0 ? screen : 0; -} - - int Fl_Wayland_Screen_Driver::get_mouse(int &xx, int &yy) { - int snum = get_mouse_unscaled(xx, yy); + open_display(); + xx = Fl::e_x_root; yy = Fl::e_y_root; + if (!seat->pointer_focus) return 0; + Fl_Window *win = Fl_Wayland_Screen_Driver::surface_to_window(seat->pointer_focus); + if (!win) return 0; + int snum = Fl_Window_Driver::driver(win)->screen_num(); float s = scale(snum); xx = xx/s; yy = yy/s; +//printf("get_mouse(%dx%d)->%d\n", xx, yy, snum); return snum; } |
