mirror of
https://github.com/fltk/fltk.git
synced 2026-06-04 15:32:12 +08:00
Remove public member function Fl_Window_Driver *Fl_Window::driver() so class Fl_Window_Driver is not in FLTK public API.
This function is replaced by static Fl_Window_Driver* Fl_Window_Driver::(const Fl_Window *win). The purpose is to have class Fl_Window_Driver outside from FLTK ABI. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12915 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
+1
-3
@@ -527,8 +527,6 @@ public:
|
||||
*/
|
||||
int decorated_h() const;
|
||||
|
||||
Fl_Window_Driver *driver() const { return pWindowDriver; }
|
||||
|
||||
// Note: Doxygen docs in Fl_Widget.H to avoid redundancy.
|
||||
virtual Fl_Window* as_window() { return this; }
|
||||
|
||||
@@ -545,7 +543,7 @@ public:
|
||||
void shape(const Fl_Image* img);
|
||||
void shape(const Fl_Image& b) ;
|
||||
int is_shaped();
|
||||
|
||||
inline int screen_num();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -181,6 +181,7 @@ public:
|
||||
#endif
|
||||
virtual int scroll(int src_x, int src_y, int src_w, int src_h, int dest_x, int dest_y,
|
||||
void (*draw_area)(void*, int,int,int,int), void* data) { return 0; }
|
||||
static Fl_Window_Driver* driver(const Fl_Window *win) {return win->pWindowDriver;}
|
||||
};
|
||||
|
||||
#endif // FL_WINDOW_DRIVER_H
|
||||
|
||||
@@ -61,7 +61,7 @@ expressed in FLTK units by the current value of the scale factor
|
||||
for the screen in use and obtains quantities in <b>drawing units</b>.
|
||||
The current scale factor value, for an Fl_Window named \e window, is given by
|
||||
\code
|
||||
int nscreen = window->driver()->screen_num(); // the screen where window is mapped
|
||||
int nscreen = window->screen_num(); // the screen where window is mapped
|
||||
float s = Fl::screen_driver()->scale(nscreen); // this screen's scale factor
|
||||
\endcode
|
||||
One drawing unit generally corresponds to one screen pixel...
|
||||
|
||||
+3
-3
@@ -695,10 +695,10 @@ void Fl::flush() {
|
||||
damage_ = 0;
|
||||
for (Fl_X* i = Fl_X::first; i; i = i->next) {
|
||||
Fl_Window* wi = i->w;
|
||||
if (wi->driver()->wait_for_expose_value) {damage_ = 1; continue;}
|
||||
if (Fl_Window_Driver::driver(wi)->wait_for_expose_value) {damage_ = 1; continue;}
|
||||
if (!wi->visible_r()) continue;
|
||||
if (wi->damage()) {
|
||||
wi->driver()->flush();
|
||||
Fl_Window_Driver::driver(wi)->flush();
|
||||
wi->clear_damage();
|
||||
}
|
||||
// destroy damage regions for windows that don't use them:
|
||||
@@ -912,7 +912,7 @@ void Fl::focus(Fl_Widget *o)
|
||||
while (w1) { win=w1; w1=win->window(); }
|
||||
if (win) {
|
||||
if (fl_xfocus != win) {
|
||||
win->driver()->take_focus();
|
||||
Fl_Window_Driver::driver(win)->take_focus();
|
||||
fl_xfocus = win;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,15 +54,15 @@ void Fl_Double_Window::resize(int X,int Y,int W,int H) {
|
||||
int oh = h();
|
||||
Fl_Window::resize(X,Y,W,H);
|
||||
Fl_X *myi = Fl_X::i(this);
|
||||
if (myi && driver()->other_xid && (ow < w() || oh < h() || Fl_Window_Driver::is_a_rescale()))
|
||||
driver()->destroy_double_buffer();
|
||||
if (myi && Fl_Window_Driver::driver(this)->other_xid && (ow < w() || oh < h() || Fl_Window_Driver::is_a_rescale()))
|
||||
Fl_Window_Driver::driver(this)->destroy_double_buffer();
|
||||
}
|
||||
|
||||
|
||||
void Fl_Double_Window::hide() {
|
||||
Fl_X *myi = Fl_X::i(this);
|
||||
if (myi && driver()->other_xid) {
|
||||
driver()->destroy_double_buffer();
|
||||
if (myi && Fl_Window_Driver::driver(this)->other_xid) {
|
||||
Fl_Window_Driver::driver(this)->destroy_double_buffer();
|
||||
}
|
||||
Fl_Window::hide();
|
||||
}
|
||||
@@ -70,7 +70,7 @@ void Fl_Double_Window::hide() {
|
||||
|
||||
void Fl_Double_Window::flush()
|
||||
{
|
||||
driver()->flush_double();
|
||||
Fl_Window_Driver::driver(this)->flush_double();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -617,7 +617,7 @@ Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w)
|
||||
|
||||
float Fl_WinAPI_Gl_Window_Driver::pixels_per_unit()
|
||||
{
|
||||
int ns = pWindow->driver()->screen_num();
|
||||
int ns = Fl_Window_Driver::driver(pWindow)->screen_num();
|
||||
return Fl::screen_driver()->scale(ns);
|
||||
}
|
||||
|
||||
@@ -715,7 +715,7 @@ void Fl_X11_Gl_Window_Driver::before_show(int& need_redraw) {
|
||||
|
||||
float Fl_X11_Gl_Window_Driver::pixels_per_unit()
|
||||
{
|
||||
int ns = pWindow->driver()->screen_num();
|
||||
int ns = Fl_Window_Driver::driver(pWindow)->screen_num();
|
||||
return Fl::screen_driver()->scale(ns);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,17 +27,17 @@
|
||||
#include <FL/Fl_Window_Driver.H>
|
||||
|
||||
void Fl_Menu_Window::show() {
|
||||
driver()->show_menu();
|
||||
Fl_Window_Driver::driver(this)->show_menu();
|
||||
}
|
||||
|
||||
void Fl_Menu_Window::flush() {
|
||||
if (!shown()) return;
|
||||
driver()->flush_menu();
|
||||
Fl_Window_Driver::driver(this)->flush_menu();
|
||||
}
|
||||
|
||||
/** Erases the window, does nothing if HAVE_OVERLAY is not defined in config.h */
|
||||
void Fl_Menu_Window::erase() {
|
||||
driver()->erase_menu();
|
||||
Fl_Window_Driver::driver(this)->erase_menu();
|
||||
}
|
||||
|
||||
// Fix the colormap flashing on Maximum Impact Graphics by erasing the
|
||||
|
||||
@@ -51,7 +51,7 @@ void Fl_Overlay_Window::hide() {
|
||||
|
||||
void Fl_Overlay_Window::flush()
|
||||
{
|
||||
driver()->flush_overlay();
|
||||
Fl_Window_Driver::driver(this)->flush_overlay();
|
||||
}
|
||||
|
||||
void Fl_Overlay_Window::resize(int X, int Y, int W, int H) {
|
||||
@@ -68,7 +68,7 @@ Fl_Overlay_Window::~Fl_Overlay_Window() {
|
||||
}
|
||||
|
||||
int Fl_Overlay_Window::can_do_overlay() {
|
||||
return driver()->can_do_overlay();
|
||||
return Fl_Window_Driver::driver(this)->can_do_overlay();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,7 +78,7 @@ int Fl_Overlay_Window::can_do_overlay() {
|
||||
calling show().
|
||||
*/
|
||||
void Fl_Overlay_Window::redraw_overlay() {
|
||||
driver()->redraw_overlay();
|
||||
Fl_Window_Driver::driver(this)->redraw_overlay();
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -302,7 +302,7 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f)
|
||||
int i = 0, count = 0; // count top-level windows, except transient scale-displaying window
|
||||
Fl_Window *win = Fl::first_window();
|
||||
while (win) {
|
||||
if (!win->parent() && (win->driver()->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) &&
|
||||
if (!win->parent() && (Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) &&
|
||||
win->user_data() != &Fl_Screen_Driver::transient_scale_display) count++;
|
||||
win = Fl::next_window(win);
|
||||
}
|
||||
@@ -310,14 +310,14 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f)
|
||||
win = Fl::first_window(); // memorize all top-level windows
|
||||
while (win) {
|
||||
if (!win->parent() && win->user_data() != &Fl_Screen_Driver::transient_scale_display &&
|
||||
(win->driver()->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) ) {
|
||||
(Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) ) {
|
||||
win_array[i++] = win;
|
||||
}
|
||||
win = Fl::next_window(win);
|
||||
}
|
||||
for (i = count - 1; i >= 0; i--) { // rescale all top-level windows, finishing with front one
|
||||
win = win_array[i];
|
||||
win->driver()->resize_after_scale_change(screen, old_f, f);
|
||||
Fl_Window_Driver::driver(win)->resize_after_scale_change(screen, old_f, f);
|
||||
win->wait_for_expose();
|
||||
}
|
||||
delete[] win_array;
|
||||
@@ -366,8 +366,8 @@ void Fl_Screen_Driver::transient_scale_display(float f, int nscreen)
|
||||
win->user_data((void*)&transient_scale_display); // prevent this window from being rescaled later
|
||||
win->set_output();
|
||||
win->set_non_modal();
|
||||
win->driver()->screen_num(nscreen);
|
||||
win->driver()->force_position(1);
|
||||
Fl_Window_Driver::driver(win)->screen_num(nscreen);
|
||||
Fl_Window_Driver::driver(win)->force_position(1);
|
||||
win->show();
|
||||
Fl::add_timeout(1, del_transient_window, win); // delete after 1 sec
|
||||
}
|
||||
@@ -382,7 +382,7 @@ int Fl_Screen_Driver::scale_handler(int event)
|
||||
if (Fl::grab()) return 0; // don't rescale when menu windows are on
|
||||
Fl_Widget *wid = Fl::focus();
|
||||
if (!wid) return 0;
|
||||
int screen = wid->top_window()->driver()->screen_num();
|
||||
int screen = Fl_Window_Driver::driver(wid->top_window())->screen_num();
|
||||
Fl_Screen_Driver *screen_dr = Fl::screen_driver();
|
||||
static float initial_scale = screen_dr->scale(screen);
|
||||
#if defined(TEST_SCALING)
|
||||
|
||||
@@ -155,7 +155,7 @@ void Fl_Widget_Surface::print_window_part(Fl_Window *win, int x, int y, int w, i
|
||||
Fl_Window *save_front = Fl::first_window();
|
||||
win->show();
|
||||
Fl::check();
|
||||
win->driver()->flush(); // makes the window current
|
||||
Fl_Window_Driver::driver(win)->flush(); // makes the window current
|
||||
Fl_RGB_Image *img = Fl_Screen_Driver::traverse_to_gl_subwindows(win, x, y, w, h, NULL);
|
||||
if (img) img->scale(w, h, 1, 1);
|
||||
if (save_front != win) save_front->show();
|
||||
@@ -186,7 +186,7 @@ void Fl_Widget_Surface::draw_decorated_window(Fl_Window *win, int x_offset, int
|
||||
{
|
||||
Fl_RGB_Image *top=0, *left=0, *bottom=0, *right=0;
|
||||
if (win->border() && !win->parent()) {
|
||||
win->driver()->capture_titlebar_and_borders(top, left, bottom, right);
|
||||
Fl_Window_Driver::driver(win)->capture_titlebar_and_borders(top, left, bottom, right);
|
||||
}
|
||||
int wsides = left ? left->w() : 0;
|
||||
int toph = top ? top->h() : 0;
|
||||
|
||||
@@ -631,6 +631,11 @@ void Fl_Window::size_range(int minw, int minh, int maxw, int maxh, int dw, int d
|
||||
pWindowDriver->size_range();
|
||||
}
|
||||
|
||||
/** The number of the screen containing the mapped window */
|
||||
inline int Fl_Window::screen_num() {
|
||||
return pWindowDriver->screen_num();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -250,7 +250,7 @@ void Fl_Window_Driver::wait_for_expose() {
|
||||
}
|
||||
|
||||
int Fl_Window_Driver::screen_num() {
|
||||
if (pWindow->parent()) return pWindow->top_window()->driver()->screen_num();
|
||||
if (pWindow->parent()) return Fl_Window_Driver::driver(pWindow->top_window())->screen_num();
|
||||
return Fl::screen_num(x(), y(), w(), h());
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1353,7 +1353,7 @@ static FLWindowDelegate *flwindowdelegate_instance = nil;
|
||||
r = [[nsw contentView] frame];
|
||||
pt2 = [nsw convertBaseToScreen:NSMakePoint(0, r.size.height)];
|
||||
pt2.y = main_screen_height - pt2.y;
|
||||
float s = Fl::screen_driver()->scale(window->driver()->screen_num());
|
||||
float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(window)->screen_num());
|
||||
pt2.x = int(pt2.x/s + 0.5); pt2.y = int(pt2.y/s + 0.5);
|
||||
Fl_Window *parent = window->window();
|
||||
while (parent) {
|
||||
@@ -1976,7 +1976,7 @@ static int fake_X_wm(Fl_Window* w,int &X,int &Y, int &bt,int &bx, int &by) {
|
||||
int W, H, xoff, yoff, dx, dy;
|
||||
int ret = bx = by = bt = 0;
|
||||
if (w->border() && !w->parent()) {
|
||||
if (w->driver()->maxw() != w->driver()->minw() || w->driver()->maxh() != w->driver()->minh()) {
|
||||
if (Fl_Window_Driver::driver(w)->maxw() != Fl_Window_Driver::driver(w)->minw() || Fl_Window_Driver::driver(w)->maxh() != Fl_Window_Driver::driver(w)->minh()) {
|
||||
ret = 2;
|
||||
} else {
|
||||
ret = 1;
|
||||
@@ -3088,7 +3088,7 @@ Fl_X* Fl_Cocoa_Window_Driver::makeWindow()
|
||||
x->xid = cw;
|
||||
x->w = w;
|
||||
i(x);
|
||||
w->driver()->wait_for_expose_value = 1;
|
||||
Fl_Window_Driver::driver(w)->wait_for_expose_value = 1;
|
||||
if (!w->parent()) {
|
||||
x->next = Fl_X::first;
|
||||
Fl_X::first = x;
|
||||
|
||||
+13
-13
@@ -848,7 +848,7 @@ void Fl_WinAPI_System_Driver::paste(Fl_Widget &receiver, int clipboard, const ch
|
||||
int hdots = GetDeviceCaps(hdc, HORZRES);
|
||||
ReleaseDC(NULL, hdc);
|
||||
float factor = (100.f * hmm) / hdots;
|
||||
float scaling = Fl::screen_driver()->scale(receiver.top_window()->driver()->screen_num());
|
||||
float scaling = Fl::screen_driver()->scale(Fl_Window_Driver::driver(receiver.top_window())->screen_num());
|
||||
if (!Fl_Window::current()) {
|
||||
Fl_GDI_Graphics_Driver *d = (Fl_GDI_Graphics_Driver*)&Fl_Graphics_Driver::default_driver();
|
||||
d->scale(scaling);// may run early at app startup before Fl_Window::make_current() scales d
|
||||
@@ -1168,7 +1168,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||
// fl_msg.lPrivate = ???
|
||||
|
||||
Fl_Window *window = fl_find(hWnd);
|
||||
float scale = (window ? Fl::screen_driver()->scale(window->driver()->screen_num()) : 1);
|
||||
float scale = (window ? Fl::screen_driver()->scale(Fl_Window_Driver::driver(window)->screen_num()) : 1);
|
||||
|
||||
if (window) {
|
||||
switch (uMsg) {
|
||||
@@ -1179,9 +1179,9 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||
float f = HIWORD(wParam) / 96.;
|
||||
GetClientRect(hWnd, &r);
|
||||
float old_f = float(r.right) / window->w();
|
||||
int ns = window->driver()->screen_num();
|
||||
int ns = Fl_Window_Driver::driver(window)->screen_num();
|
||||
Fl::screen_driver()->scale(ns, f);
|
||||
window->driver()->resize_after_scale_change(ns, old_f, f);
|
||||
Fl_Window_Driver::driver(window)->resize_after_scale_change(ns, old_f, f);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1204,7 +1204,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||
case WM_PAINT: {
|
||||
Fl_Region R, R2;
|
||||
Fl_X *i = Fl_X::i(window);
|
||||
window->driver()->wait_for_expose_value = 0;
|
||||
Fl_Window_Driver::driver(window)->wait_for_expose_value = 0;
|
||||
char redraw_whole_window = false;
|
||||
if (!i->region && window->damage()) {
|
||||
// Redraw the whole window...
|
||||
@@ -1246,7 +1246,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||
// Very annoying!
|
||||
fl_GetDC(hWnd); // Make sure we have a DC for this window...
|
||||
fl_save_pen();
|
||||
window->driver()->flush();
|
||||
Fl_Window_Driver::driver(window)->flush();
|
||||
fl_restore_pen();
|
||||
window->clear_damage();
|
||||
return 0;
|
||||
@@ -1652,10 +1652,10 @@ static int fake_X_wm_style(const Fl_Window *w, int &X, int &Y, int &bt, int &bx,
|
||||
int ret = bx = by = bt = 0;
|
||||
|
||||
int fallback = 1;
|
||||
float s = Fl::screen_driver()->scale(w->driver()->screen_num());
|
||||
float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(w)->screen_num());
|
||||
if (!w->parent()) {
|
||||
if (fl_xid(w)) {
|
||||
Fl_WinAPI_Window_Driver *dr = (Fl_WinAPI_Window_Driver *)w->driver();
|
||||
Fl_WinAPI_Window_Driver *dr = Fl_WinAPI_Window_Driver::driver(w);
|
||||
dr->border_width_title_bar_height(bx, by, bt);
|
||||
xoff = bx;
|
||||
yoff = by + bt;
|
||||
@@ -1952,19 +1952,19 @@ Fl_X *Fl_WinAPI_Window_Driver::makeWindow() {
|
||||
// compute adequate screen where to put the window
|
||||
int nscreen = 0;
|
||||
if (w->parent()) {
|
||||
nscreen = w->top_window()->driver()->screen_num();
|
||||
} else if (w->driver()->force_position() && Fl_WinAPI_Window_Driver::driver(w)->screen_num_ >= 0) {
|
||||
nscreen = w->driver()->screen_num();
|
||||
nscreen = Fl_Window_Driver::driver(w->top_window())->screen_num();
|
||||
} else if (Fl_Window_Driver::driver(w)->force_position() && Fl_WinAPI_Window_Driver::driver(w)->screen_num_ >= 0) {
|
||||
nscreen = Fl_Window_Driver::driver(w)->screen_num();
|
||||
} else {
|
||||
Fl_Window *hint = Fl::first_window();
|
||||
if (hint) {
|
||||
nscreen = hint->top_window()->driver()->screen_num();
|
||||
nscreen = Fl_Window_Driver::driver(hint->top_window())->screen_num();
|
||||
} else {
|
||||
int mx, my;
|
||||
nscreen = Fl::screen_driver()->get_mouse(mx, my);
|
||||
}
|
||||
}
|
||||
w->driver()->screen_num(nscreen);
|
||||
Fl_Window_Driver::driver(w)->screen_num(nscreen);
|
||||
float s = Fl::screen_driver()->scale(nscreen);
|
||||
int xp = w->x() * s; // these are in graphical units
|
||||
int yp = w->y() * s;
|
||||
|
||||
+9
-9
@@ -1098,7 +1098,7 @@ static void set_event_xy(Fl_Window *win) {
|
||||
# endif
|
||||
float s = 1;
|
||||
#if USE_XFT
|
||||
s = Fl::screen_driver()->scale(win->driver()->screen_num());
|
||||
s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(win)->screen_num());
|
||||
#endif
|
||||
Fl::e_x_root = fl_xevent->xbutton.x_root/s;
|
||||
Fl::e_x = fl_xevent->xbutton.x/s;
|
||||
@@ -1654,7 +1654,7 @@ int fl_handle(const XEvent& thisevent)
|
||||
break;
|
||||
|
||||
case Expose:
|
||||
window->driver()->wait_for_expose_value = 0;
|
||||
Fl_Window_Driver::driver(window)->wait_for_expose_value = 0;
|
||||
# if 0
|
||||
// try to keep windows on top even if WM_TRANSIENT_FOR does not work:
|
||||
// opaque move/resize window managers do not like this, so I disabled it.
|
||||
@@ -1665,7 +1665,7 @@ int fl_handle(const XEvent& thisevent)
|
||||
case GraphicsExpose:
|
||||
{
|
||||
#if USE_XFT
|
||||
int ns = window->driver()->screen_num();
|
||||
int ns = Fl_Window_Driver::driver(window)->screen_num();
|
||||
float s = Fl::screen_driver()->scale(ns);
|
||||
window->damage(FL_DAMAGE_EXPOSE, xevent.xexpose.x/s, xevent.xexpose.y/s,
|
||||
xevent.xexpose.width/s + 2, xevent.xexpose.height/s + 2);
|
||||
@@ -2072,7 +2072,7 @@ int fl_handle(const XEvent& thisevent)
|
||||
if ( !wasXExceptionRaised() ) {
|
||||
resize_bug_fix = window;
|
||||
#if USE_XFT
|
||||
int ns = window->driver()->screen_num();
|
||||
int ns = Fl_Window_Driver::driver(window)->screen_num();
|
||||
float s = Fl::screen_driver()->scale(ns);
|
||||
#else
|
||||
float s = 1;
|
||||
@@ -2282,11 +2282,11 @@ void fl_fix_focus(); // in Fl.cxx
|
||||
Fl_X* Fl_X::set_xid(Fl_Window* win, Window winxid) {
|
||||
Fl_X *xp = new Fl_X;
|
||||
xp->xid = winxid;
|
||||
win->driver()->other_xid = 0;
|
||||
Fl_Window_Driver::driver(win)->other_xid = 0;
|
||||
xp->w = win; win->i = xp;
|
||||
xp->next = Fl_X::first;
|
||||
xp->region = 0;
|
||||
win->driver()->wait_for_expose_value = 1;
|
||||
Fl_Window_Driver::driver(win)->wait_for_expose_value = 1;
|
||||
#ifdef USE_XDBE
|
||||
Fl_X11_Window_Driver::driver(win)->backbuffer_bad = 1;
|
||||
#endif
|
||||
@@ -2427,13 +2427,13 @@ void Fl_X::make_xid(Fl_Window* win, XVisualInfo *visual, Colormap colormap)
|
||||
//compute adequate screen where to put the window
|
||||
int nscreen = 0;
|
||||
if (win->parent()) {
|
||||
nscreen = win->top_window()->driver()->screen_num();
|
||||
nscreen = Fl_Window_Driver::driver(win->top_window())->screen_num();
|
||||
} else if (win->force_position() && Fl_X11_Window_Driver::driver(win)->screen_num_ >= 0) {
|
||||
nscreen = win->driver()->screen_num();
|
||||
nscreen = Fl_Window_Driver::driver(win)->screen_num();
|
||||
} else {
|
||||
Fl_Window *hint = Fl::first_window();
|
||||
if (hint) {
|
||||
nscreen = hint->top_window()->driver()->screen_num();
|
||||
nscreen = Fl_Window_Driver::driver(hint->top_window())->screen_num();
|
||||
}
|
||||
}
|
||||
Fl_X11_Window_Driver::driver(win)->screen_num(nscreen);
|
||||
|
||||
@@ -71,8 +71,8 @@ private:
|
||||
#endif
|
||||
|
||||
public:
|
||||
static inline Fl_Android_Window_Driver* driver(Fl_Window *w) {
|
||||
return (Fl_Android_Window_Driver*)w->driver();
|
||||
static inline Fl_Android_Window_Driver* driver(const Fl_Window *w) {
|
||||
return (Fl_Android_Window_Driver*)Fl_Window_Driver::driver(w);
|
||||
}
|
||||
|
||||
Fl_Android_Window_Driver(Fl_Window *w) : Fl_Window_Driver(w) {}
|
||||
|
||||
@@ -99,7 +99,7 @@ void Fl_Android_Window_Driver::expose_all()
|
||||
{
|
||||
for (Fl_X *x = Fl_X::first; x; x = x->next) {
|
||||
Fl_Window *win = x->w;
|
||||
win->driver()->wait_for_expose_value = 0;
|
||||
Fl_Android_Window_Driver::driver(win)->wait_for_expose_value = 0;
|
||||
win->damage(FL_DAMAGE_EXPOSE);
|
||||
win->redraw();
|
||||
}
|
||||
|
||||
@@ -383,7 +383,7 @@ void Fl_Cocoa_Printer_Driver::draw_decorated_window(Fl_Window *win, int x_offset
|
||||
CGContextRef gc = (CGContextRef)driver()->gc();
|
||||
CGContextSaveGState(gc);
|
||||
CGContextTranslateCTM(gc, x_offset - 0.5, y_offset + bt - 0.5);
|
||||
float s = Fl::screen_driver()->scale(win->driver()->screen_num());
|
||||
float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(win)->screen_num());
|
||||
CGContextScaleCTM(gc, 1/s, -1/s);
|
||||
Fl_Cocoa_Window_Driver::draw_layer_to_context(layer, gc, win->w() * s, bt);
|
||||
CGContextRestoreGState(gc);
|
||||
@@ -428,7 +428,7 @@ void Fl_Cocoa_Printer_Driver::draw_decorated_window(Fl_Window *win, int x_offset
|
||||
Fl::check();
|
||||
// capture the window title bar with no title
|
||||
Fl_RGB_Image *top, *left, *bottom, *right;
|
||||
win->driver()->capture_titlebar_and_borders(top, left, bottom, right);
|
||||
Fl_Window_Driver::driver(win)->capture_titlebar_and_borders(top, left, bottom, right);
|
||||
[(NSWindow*)fl_xid(win) setTitle:title]; // put back the window title
|
||||
this->set_current(); // back to the Fl_Paged_Device
|
||||
top->draw(x_offset, y_offset); // print the title bar
|
||||
|
||||
@@ -73,7 +73,7 @@ private:
|
||||
public:
|
||||
Fl_Cocoa_Window_Driver(Fl_Window*);
|
||||
~Fl_Cocoa_Window_Driver();
|
||||
static inline Fl_Cocoa_Window_Driver* driver(Fl_Window *w) {return (Fl_Cocoa_Window_Driver*)w->driver();}
|
||||
static inline Fl_Cocoa_Window_Driver* driver(const Fl_Window *w) {return (Fl_Cocoa_Window_Driver*)Fl_Window_Driver::driver(w);}
|
||||
CGContextRef gc; // graphics context
|
||||
NSCursor *cursor;
|
||||
static void q_release_context(Fl_Cocoa_Window_Driver *x = 0); // free all resources associated with gc
|
||||
|
||||
@@ -109,7 +109,7 @@ Fl_RGB_Image* Fl_OpenGL_Display_Device::capture_gl_rectangle(Fl_Gl_Window *glw,
|
||||
glPixelStorei(GL_PACK_SKIP_ROWS, 0);
|
||||
glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
|
||||
//
|
||||
int ns = glw->driver()->screen_num();
|
||||
int ns = Fl_Window_Driver::driver(glw)->screen_num();
|
||||
float s = Fl::screen_driver()->scale(ns);
|
||||
if (s != 1) {
|
||||
x *= s; y *= s; w *= s; h *= s;
|
||||
|
||||
@@ -52,7 +52,7 @@ Fl_Quartz_Image_Surface_Driver::Fl_Quartz_Image_Surface_Driver(int w, int h, int
|
||||
if (high_res) {
|
||||
s = Fl_Graphics_Driver::default_driver().scale();
|
||||
Fl_Window *cw = Fl_Window::current();
|
||||
if (cw && ((Fl_Cocoa_Window_Driver*)cw->driver())->mapped_to_retina()) s *= 2;
|
||||
if (cw && Fl_Cocoa_Window_Driver::driver(cw)->mapped_to_retina()) s *= 2;
|
||||
W *= s; H *= s;
|
||||
}
|
||||
CGColorSpaceRef lut = CGColorSpaceCreateDeviceRGB();
|
||||
|
||||
@@ -68,7 +68,7 @@ private:
|
||||
public:
|
||||
Fl_WinAPI_Window_Driver(Fl_Window*);
|
||||
~Fl_WinAPI_Window_Driver();
|
||||
static inline Fl_WinAPI_Window_Driver* driver(Fl_Window *w) {return (Fl_WinAPI_Window_Driver*)w->driver();}
|
||||
static inline Fl_WinAPI_Window_Driver* driver(const Fl_Window *w) {return (Fl_WinAPI_Window_Driver*)Fl_Window_Driver::driver(w);}
|
||||
HDC private_dc; // used for OpenGL
|
||||
RECT border_width_title_bar_height(int &bx, int &by, int &bt);
|
||||
virtual void screen_num(int n);
|
||||
|
||||
@@ -64,7 +64,7 @@ Fl_WinAPI_Window_Driver::~Fl_WinAPI_Window_Driver()
|
||||
|
||||
int Fl_WinAPI_Window_Driver::screen_num() {
|
||||
if (pWindow->parent()) {
|
||||
screen_num_ = pWindow->top_window()->driver()->screen_num();
|
||||
screen_num_ = Fl_Window_Driver::driver(pWindow->top_window())->screen_num();
|
||||
}
|
||||
return screen_num_ >= 0 ? screen_num_ : 0;
|
||||
}
|
||||
@@ -694,7 +694,7 @@ void Fl_WinAPI_Window_Driver::resize_after_screen_change(void *data) {
|
||||
GetClientRect(fl_xid(win), &r);
|
||||
float old_f = float(r.right)/win->w();
|
||||
int ns = data_for_resize_window_between_screens_.screen;
|
||||
win->driver()->resize_after_scale_change(ns, old_f, Fl::screen_driver()->scale(ns));
|
||||
Fl_Window_Driver::driver(win)->resize_after_scale_change(ns, old_f, Fl::screen_driver()->scale(ns));
|
||||
data_for_resize_window_between_screens_.busy = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -801,7 +801,7 @@ Fl_RGB_Image *Fl_X11_Screen_Driver::read_win_rectangle(int X, int Y, int w, int
|
||||
RootWindow(fl_display, fl_screen), X*s, Y*s, &dxs, &dys, &child_win);
|
||||
dx = dxs/s; dy = dys/s;
|
||||
// screen dimensions
|
||||
Fl::screen_xywh(sx, sy, sw, sh, win->driver()->screen_num());
|
||||
Fl::screen_xywh(sx, sy, sw, sh, Fl_Window_Driver::driver(win)->screen_num());
|
||||
}
|
||||
if (win && !allow_outside && int(s) != s) {
|
||||
ws = (w+1)*s-1;
|
||||
|
||||
@@ -92,7 +92,7 @@ private:
|
||||
public:
|
||||
Fl_X11_Window_Driver(Fl_Window*);
|
||||
virtual ~Fl_X11_Window_Driver();
|
||||
static inline Fl_X11_Window_Driver* driver(Fl_Window *w) {return (Fl_X11_Window_Driver*)w->driver();}
|
||||
static inline Fl_X11_Window_Driver* driver(const Fl_Window *w) {return (Fl_X11_Window_Driver*)Fl_Window_Driver::driver(w);}
|
||||
#if USE_XFT
|
||||
virtual int screen_num();
|
||||
static void resize_after_screen_change(void *data);
|
||||
|
||||
@@ -691,14 +691,14 @@ Fl_X11_Window_Driver::type_for_resize_window_between_screens Fl_X11_Window_Drive
|
||||
void Fl_X11_Window_Driver::resize_after_screen_change(void *data) {
|
||||
Fl_Window *win = (Fl_Window*)data;
|
||||
float f = Fl::screen_driver()->scale(data_for_resize_window_between_screens_.screen);
|
||||
win->driver()->resize_after_scale_change(data_for_resize_window_between_screens_.screen, f, f);
|
||||
Fl_Window_Driver::driver(win)->resize_after_scale_change(data_for_resize_window_between_screens_.screen, f, f);
|
||||
data_for_resize_window_between_screens_.busy = false;
|
||||
}
|
||||
|
||||
|
||||
int Fl_X11_Window_Driver::screen_num() {
|
||||
if (pWindow->parent()) {
|
||||
screen_num_ = pWindow->top_window()->driver()->screen_num();
|
||||
screen_num_ = Fl_Window_Driver::driver(pWindow->top_window())->screen_num();
|
||||
}
|
||||
return screen_num_ >= 0 ? screen_num_ : 0;
|
||||
}
|
||||
|
||||
@@ -736,7 +736,7 @@ void Fl_Xlib_Graphics_Driver::draw_fixed(Fl_RGB_Image *img, int X, int Y, int W,
|
||||
int ox = offset_x_, oy = offset_y_;
|
||||
offset_x_ = offset_y_ = 0;
|
||||
Fl_X11_Screen_Driver *d = (Fl_X11_Screen_Driver*)Fl::screen_driver();
|
||||
int nscreen = Fl_Window::current()->driver()->screen_num();
|
||||
int nscreen = Fl_Window_Driver::driver(Fl_Window::current())->screen_num();
|
||||
float keep = d->scale(nscreen);
|
||||
d->scale(nscreen, 1);
|
||||
push_no_clip();
|
||||
|
||||
@@ -90,7 +90,7 @@ public:
|
||||
HWND hWnd = WindowFromPoint( ppt );
|
||||
Fl_Window *target = fl_find( hWnd );
|
||||
if (target) {
|
||||
float s = Fl::screen_driver()->scale(target->driver()->screen_num());
|
||||
float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(target)->screen_num());
|
||||
Fl::e_x_root /= s;
|
||||
Fl::e_y_root /= s;
|
||||
Fl::e_x = Fl::e_x_root-target->x();
|
||||
@@ -125,7 +125,7 @@ public:
|
||||
Fl::e_x_root = pt.x;
|
||||
Fl::e_y_root = pt.y;
|
||||
if (fl_dnd_target_window) {
|
||||
float s = Fl::screen_driver()->scale(fl_dnd_target_window->driver()->screen_num());
|
||||
float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(fl_dnd_target_window)->screen_num());
|
||||
Fl::e_x_root /= s;
|
||||
Fl::e_y_root /= s;
|
||||
Fl::e_x = Fl::e_x_root-fl_dnd_target_window->x();
|
||||
@@ -162,7 +162,7 @@ public:
|
||||
fl_dnd_target_window = 0;
|
||||
Fl::e_x_root = pt.x;
|
||||
Fl::e_y_root = pt.y;
|
||||
float s = Fl::screen_driver()->scale(target->driver()->screen_num());
|
||||
float s = Fl::screen_driver()->scale(Fl_Window_Driver::driver(target)->screen_num());
|
||||
Fl::e_x_root /= s;
|
||||
Fl::e_y_root /= s;
|
||||
if (target) {
|
||||
|
||||
@@ -72,7 +72,7 @@ void fl_scroll(int X, int Y, int W, int H, int dx, int dy,
|
||||
clip_h = H-src_h;
|
||||
}
|
||||
|
||||
int retval = Fl_Window::current()->driver()->scroll(src_x, src_y, src_w, src_h,
|
||||
int retval = Fl_Window_Driver::driver(Fl_Window::current())->scroll(src_x, src_y, src_w, src_h,
|
||||
dest_x, dest_y, draw_area, data);
|
||||
if (retval) {
|
||||
draw_area(data,X,Y,W,H);
|
||||
|
||||
Reference in New Issue
Block a user