Add static Fl_XXX_Window_Driver *driver(Fl_Window*) to get the platform-specific driver of a window.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11663 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
9f78323574
commit
4aa388d4ff
@ -114,7 +114,7 @@ void Fl_Gl_Window::show() {
|
||||
int Fl_Gl_Window::pixels_per_unit()
|
||||
{
|
||||
return (fl_mac_os_version >= 100700 && Fl::use_high_res_GL() && Fl_X::i(this) &&
|
||||
((Fl_Cocoa_Window_Driver*)driver())->mapped_to_retina()) ? 2 : 1;
|
||||
Fl_Cocoa_Window_Driver::driver(this)->mapped_to_retina()) ? 2 : 1;
|
||||
}
|
||||
|
||||
#endif // __APPLE__ // PORTME: platform OpenGL management
|
||||
@ -198,7 +198,7 @@ void Fl_Gl_Window::make_current() {
|
||||
// printf("make_current: context_=%p\n", context_);
|
||||
#if defined(__APPLE__) // PORTME: platform OpenGL management
|
||||
// detect if the window was moved between low and high resolution displays
|
||||
Fl_Cocoa_Window_Driver *d = (Fl_Cocoa_Window_Driver*)driver();
|
||||
Fl_Cocoa_Window_Driver *d = Fl_Cocoa_Window_Driver::driver(this);
|
||||
if (d->changed_resolution()){
|
||||
d->changed_resolution(false);
|
||||
invalidate();
|
||||
@ -443,7 +443,7 @@ void Fl_Gl_Window::resize(int X,int Y,int W,int H) {
|
||||
|
||||
#ifdef __APPLE__ // PORTME: platform OpenGL management
|
||||
Fl_X *flx = Fl_X::i(this);
|
||||
Fl_Cocoa_Window_Driver *d = (Fl_Cocoa_Window_Driver*)driver();
|
||||
Fl_Cocoa_Window_Driver *d = Fl_Cocoa_Window_Driver::driver(this);
|
||||
if (flx && d->in_windowDidResize()) Fl_Cocoa_Screen_Driver::GLcontext_update(context_);
|
||||
#endif
|
||||
|
||||
|
@ -754,7 +754,7 @@ void Fl_Cocoa_Screen_Driver::remove_timeout(Fl_Timeout_Handler cb, void* data)
|
||||
srect = CGRectIntersection(prect, srect); // area of subwindow inside its parent
|
||||
from = parent;
|
||||
}
|
||||
Fl_Cocoa_Window_Driver *d = (Fl_Cocoa_Window_Driver*)w->driver();
|
||||
Fl_Cocoa_Window_Driver *d = Fl_Cocoa_Window_Driver::driver(w);
|
||||
CGRect *r = d->subRect();
|
||||
CGRect current_clip = (r ? *r : full); // current subwindow clip
|
||||
if (!CGRectEqualToRect(srect, current_clip)) { // if new clip differs from current clip
|
||||
@ -1350,7 +1350,7 @@ static FLWindowDelegate *flwindowdelegate_instance = nil;
|
||||
parent = parent->window();
|
||||
}
|
||||
resize_from_system = window;
|
||||
Fl_Cocoa_Window_Driver *d = (Fl_Cocoa_Window_Driver*)window->driver();
|
||||
Fl_Cocoa_Window_Driver *d = Fl_Cocoa_Window_Driver::driver(window);
|
||||
if (window->as_gl_window() && Fl_X::i(window)) d->in_windowDidResize(true);
|
||||
update_e_xy_and_e_xy_root(nsw);
|
||||
window->resize((int)pt2.x, (int)pt2.y, (int)r.size.width, (int)r.size.height);
|
||||
@ -1925,7 +1925,7 @@ static void handleUpdateEvent( Fl_Window *window )
|
||||
{
|
||||
if ( !window ) return;
|
||||
Fl_X *i = Fl_X::i( window );
|
||||
Fl_Cocoa_Window_Driver *d = (Fl_Cocoa_Window_Driver*)window->driver();
|
||||
Fl_Cocoa_Window_Driver *d = Fl_Cocoa_Window_Driver::driver(window);
|
||||
if (fl_mac_os_version >= 100700) { // determine whether window is mapped to a retina display
|
||||
bool previous = d->mapped_to_retina();
|
||||
// rewrite next call that requires 10.7 and therefore triggers a compiler warning on old SDKs
|
||||
@ -2321,8 +2321,8 @@ static FLTextInputContext* fltextinputcontext_instance = nil;
|
||||
if (!i) return; // fix for STR #3128
|
||||
// We have to have at least one cursor rect for invalidateCursorRectsForView
|
||||
// to work, hence the "else" clause.
|
||||
if (((Fl_Cocoa_Window_Driver*)w->driver())->cursor)
|
||||
[self addCursorRect:[self visibleRect] cursor:((Fl_Cocoa_Window_Driver*)w->driver())->cursor];
|
||||
if (Fl_Cocoa_Window_Driver::driver(w)->cursor)
|
||||
[self addCursorRect:[self visibleRect] cursor:Fl_Cocoa_Window_Driver::driver(w)->cursor];
|
||||
else
|
||||
[self addCursorRect:[self visibleRect] cursor:[NSCursor arrowCursor]];
|
||||
}
|
||||
|
@ -1356,7 +1356,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||
}
|
||||
|
||||
case WM_GETMINMAXINFO:
|
||||
((Fl_WinAPI_Window_Driver*)window->driver())->set_minmax((LPMINMAXINFO)lParam);
|
||||
Fl_WinAPI_Window_Driver::driver(window)->set_minmax((LPMINMAXINFO)lParam);
|
||||
break;
|
||||
|
||||
case WM_SIZE:
|
||||
@ -1383,7 +1383,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||
case WM_SETCURSOR:
|
||||
if (LOWORD(lParam) == HTCLIENT) {
|
||||
while (window->parent()) window = window->window();
|
||||
SetCursor(((Fl_WinAPI_Window_Driver*)window->driver())->cursor);
|
||||
SetCursor(Fl_WinAPI_Window_Driver::driver(window)->cursor);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
@ -2070,12 +2070,12 @@ void Fl_Window::icons(HICON big_icon, HICON small_icon)
|
||||
free_icons();
|
||||
|
||||
if (big_icon != NULL)
|
||||
((Fl_WinAPI_Window_Driver*)pWindowDriver)->icon_->big_icon = CopyIcon(big_icon);
|
||||
Fl_WinAPI_Window_Driver::driver(this)->icon_->big_icon = CopyIcon(big_icon);
|
||||
if (small_icon != NULL)
|
||||
((Fl_WinAPI_Window_Driver*)pWindowDriver)->icon_->small_icon = CopyIcon(small_icon);
|
||||
Fl_WinAPI_Window_Driver::driver(this)->icon_->small_icon = CopyIcon(small_icon);
|
||||
|
||||
if (Fl_X::i(this))
|
||||
((Fl_WinAPI_Window_Driver*)pWindowDriver)->set_icons();
|
||||
Fl_WinAPI_Window_Driver::driver(this)->set_icons();
|
||||
}
|
||||
|
||||
/** Sets the default window icons.
|
||||
|
12
src/Fl_x.cxx
12
src/Fl_x.cxx
@ -2222,7 +2222,7 @@ Fl_X* Fl_X::set_xid(Fl_Window* win, Window winxid) {
|
||||
xp->region = 0;
|
||||
win->driver()->wait_for_expose_value = 1;
|
||||
#ifdef USE_XDBE
|
||||
((Fl_X11_Window_Driver*)win->pWindowDriver)->backbuffer_bad = 1;
|
||||
Fl_X11_Window_Driver::driver(win)->backbuffer_bad = 1;
|
||||
#endif
|
||||
Fl_X::first = xp;
|
||||
if (win->modal()) {Fl::modal_ = win; fl_fix_focus();}
|
||||
@ -2386,7 +2386,7 @@ void Fl_X::make_xid(Fl_Window* win, XVisualInfo *visual, Colormap colormap)
|
||||
XA_ATOM, 32, 0, (uchar*)&WM_DELETE_WINDOW, 1);
|
||||
|
||||
// send size limits and border:
|
||||
((Fl_X11_Window_Driver*)win->pWindowDriver)->sendxjunk();
|
||||
Fl_X11_Window_Driver::driver(win)->sendxjunk();
|
||||
|
||||
// set the class property, which controls the icon used:
|
||||
if (win->xclass()) {
|
||||
@ -2453,14 +2453,14 @@ void Fl_X::make_xid(Fl_Window* win, XVisualInfo *visual, Colormap colormap)
|
||||
Fl_Window::show_iconic_ = 0;
|
||||
showit = 0;
|
||||
}
|
||||
if (((Fl_X11_Window_Driver*)win->pWindowDriver)->icon_->legacy_icon) {
|
||||
hints->icon_pixmap = (Pixmap)((Fl_X11_Window_Driver*)win->pWindowDriver)->icon_->legacy_icon;
|
||||
if (Fl_X11_Window_Driver::driver(win)->icon_->legacy_icon) {
|
||||
hints->icon_pixmap = (Pixmap)Fl_X11_Window_Driver::driver(win)->icon_->legacy_icon;
|
||||
hints->flags |= IconPixmapHint;
|
||||
}
|
||||
XSetWMHints(fl_display, xp->xid, hints);
|
||||
XFree(hints);
|
||||
|
||||
((Fl_X11_Window_Driver*)win->pWindowDriver)->set_icons();
|
||||
Fl_X11_Window_Driver::driver(win)->set_icons();
|
||||
}
|
||||
|
||||
// set the window type for menu and tooltip windows to avoid animations (compiz)
|
||||
@ -2481,7 +2481,7 @@ void Fl_X::make_xid(Fl_Window* win, XVisualInfo *visual, Colormap colormap)
|
||||
#endif
|
||||
|
||||
if (win->is_shaped()) {
|
||||
((Fl_X11_Window_Driver*)win->pWindowDriver)->combine_mask();
|
||||
Fl_X11_Window_Driver::driver(win)->combine_mask();
|
||||
}
|
||||
XMapWindow(fl_display, xp->xid);
|
||||
if (showit) {
|
||||
|
@ -373,7 +373,7 @@ void Fl_Cocoa_Printer_Driver::print_window_part(Fl_Window *win, int x, int y, in
|
||||
Fl_Window *save_front = Fl::first_window();
|
||||
win->show();
|
||||
Fl::check();
|
||||
CGImageRef img = ((Fl_Cocoa_Window_Driver*)win->driver())->CGImage_from_window_rect(x, y, w, h);
|
||||
CGImageRef img = Fl_Cocoa_Window_Driver::driver(win)->CGImage_from_window_rect(x, y, w, h);
|
||||
if (save_front != win) save_front->show();
|
||||
current->set_current();
|
||||
((Fl_Quartz_Graphics_Driver*)driver())->draw_CGImage(img,delta_x, delta_y, w, h, 0,0,w,h);
|
||||
|
@ -168,7 +168,7 @@ void Fl_Cocoa_Screen_Driver::grab(Fl_Window* win)
|
||||
if (win) {
|
||||
if (!Fl::grab_) {
|
||||
fl_capture = Fl_X::i(Fl::first_window())->xid;
|
||||
((Fl_Cocoa_Window_Driver*)Fl::first_window()->driver())->set_key_window();
|
||||
Fl_Cocoa_Window_Driver::driver(Fl::first_window())->set_key_window();
|
||||
}
|
||||
Fl::grab_ = win;
|
||||
} else {
|
||||
@ -339,7 +339,7 @@ Fl_Cocoa_Screen_Driver::read_image(uchar *p, // I - Pixel buffer or NULL to all
|
||||
if( (sw - x < w) || (sh - y < h) ) return NULL;
|
||||
}
|
||||
else { // reading from current window
|
||||
Fl_Cocoa_Window_Driver *d = (Fl_Cocoa_Window_Driver*)Fl_Window::current()->driver();
|
||||
Fl_Cocoa_Window_Driver *d = Fl_Cocoa_Window_Driver::driver(Fl_Window::current());
|
||||
base = d->bitmap_from_window_rect(x,y,w,h,&delta);
|
||||
if (!base) return NULL;
|
||||
rowBytes = delta*w;
|
||||
|
@ -75,6 +75,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();}
|
||||
CGContextRef gc; // graphics context
|
||||
NSCursor *cursor;
|
||||
static void q_release_context(Fl_Cocoa_Window_Driver *x = 0); // free all resources associated with gc
|
||||
|
@ -68,6 +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();}
|
||||
|
||||
struct icon_data *icon_;
|
||||
HCURSOR cursor;
|
||||
|
@ -78,6 +78,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();}
|
||||
|
||||
// --- window data
|
||||
virtual int decorated_w();
|
||||
|
Loading…
x
Reference in New Issue
Block a user