Rewrite Fl_Window::hotspot(int X, int Y, int offscreen) under the driver model.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11412 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
fdaad858ba
commit
d3b33cdaea
@ -96,6 +96,8 @@ public:
|
||||
virtual void use_border();
|
||||
virtual void size_range();
|
||||
virtual void iconize() {}
|
||||
virtual void decoration_sizes(int *top, int *left, int *right, int *bottom) {
|
||||
*top = *left = *right = *bottom = 0; }
|
||||
|
||||
// --- window shape stuff
|
||||
void shape_pixmap_(Fl_Image* pixmap); // TODO: check
|
||||
|
||||
@ -18,8 +18,7 @@
|
||||
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/x.H>
|
||||
#include <stdio.h>
|
||||
#include <FL/Fl_Window_Driver.H>
|
||||
|
||||
void Fl_Window::hotspot(int X, int Y, int offscreen) {
|
||||
int mx,my;
|
||||
@ -40,30 +39,9 @@ void Fl_Window::hotspot(int X, int Y, int offscreen) {
|
||||
int bottom = 0;
|
||||
|
||||
if (border()) {
|
||||
#ifdef WIN32
|
||||
if (size_range_set && (maxw != minw || maxh != minh)) {
|
||||
left = right = GetSystemMetrics(SM_CXSIZEFRAME);
|
||||
top = bottom = GetSystemMetrics(SM_CYSIZEFRAME);
|
||||
} else {
|
||||
left = right = GetSystemMetrics(SM_CXFIXEDFRAME);
|
||||
top = bottom = GetSystemMetrics(SM_CYFIXEDFRAME);
|
||||
}
|
||||
top += GetSystemMetrics(SM_CYCAPTION);
|
||||
#elif defined(__APPLE__) // PORTME: Fl_Window_Driver - platform window driver
|
||||
top = 24;
|
||||
left = 2;
|
||||
right = 2;
|
||||
bottom = 2;
|
||||
#else
|
||||
// Ensure border is on screen; these values are generic enough
|
||||
// to work with many window managers, and are based on KDE defaults.
|
||||
top = 20;
|
||||
left = 4;
|
||||
right = 4;
|
||||
bottom = 8;
|
||||
#endif
|
||||
pWindowDriver->decoration_sizes(&top, &left, &right, &bottom);
|
||||
}
|
||||
// now insure contents are on-screen (more important than border):
|
||||
// now ensure contents are on-screen (more important than border):
|
||||
if (X+w()+right > scr_w+scr_x) X = scr_w+scr_x-right-w();
|
||||
if (X-left < scr_x) X = left + scr_x;
|
||||
if (Y+h()+bottom > scr_h+scr_y) Y = scr_h+scr_y-bottom-h();
|
||||
@ -85,7 +63,6 @@ void Fl_Window::hotspot(const Fl_Widget *o, int offscreen) {
|
||||
hotspot(X,Y,offscreen);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@ -84,6 +84,7 @@ public:
|
||||
virtual void fullscreen_off(int X, int Y, int W, int H);
|
||||
virtual void size_range();
|
||||
virtual void iconize();
|
||||
virtual void decoration_sizes(int *top, int *left, int *right, int *bottom);
|
||||
|
||||
virtual void shape(const Fl_Image* img);
|
||||
// that one is implemented in Fl_Cocoa.mm because it uses Objective-c
|
||||
|
||||
@ -258,6 +258,14 @@ void Fl_Cocoa_Window_Driver::fullscreen_off(int X, int Y, int W, int H) {
|
||||
Fl::handle(FL_FULLSCREEN, pWindow);
|
||||
}
|
||||
|
||||
|
||||
void Fl_Cocoa_Window_Driver::decoration_sizes(int *top, int *left, int *right, int *bottom) {
|
||||
*top = 24;
|
||||
*left = 2;
|
||||
*right = 2;
|
||||
*bottom = 2;
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@ -88,6 +88,7 @@ public:
|
||||
virtual void fullscreen_on();
|
||||
virtual void fullscreen_off(int X, int Y, int W, int H);
|
||||
virtual void iconize();
|
||||
virtual void decoration_sizes(int *top, int *left, int *right, int *bottom);
|
||||
|
||||
virtual void shape(const Fl_Image* img);
|
||||
virtual void icons(const Fl_RGB_Image *icons[], int count);
|
||||
|
||||
@ -613,6 +613,18 @@ void Fl_WinAPI_Window_Driver::iconize() {
|
||||
ShowWindow(fl_xid(pWindow), SW_SHOWMINNOACTIVE);
|
||||
}
|
||||
|
||||
|
||||
void Fl_WinAPI_Window_Driver::decoration_sizes(int *top, int *left, int *right, int *bottom) {
|
||||
if (size_range_set() && (maxw() != minw() || maxh() != minh())) {
|
||||
*left = *right = GetSystemMetrics(SM_CXSIZEFRAME);
|
||||
*top = *bottom = GetSystemMetrics(SM_CYSIZEFRAME);
|
||||
} else {
|
||||
*left = *right = GetSystemMetrics(SM_CXFIXEDFRAME);
|
||||
*top = *bottom = GetSystemMetrics(SM_CYFIXEDFRAME);
|
||||
}
|
||||
*top += GetSystemMetrics(SM_CYCAPTION);
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@ -99,6 +99,7 @@ public:
|
||||
virtual void use_border();
|
||||
virtual void size_range();
|
||||
virtual void iconize();
|
||||
virtual void decoration_sizes(int *top, int *left, int *right, int *bottom);
|
||||
|
||||
virtual void shape(const Fl_Image* img);
|
||||
virtual void icons(const Fl_RGB_Image *icons[], int count);
|
||||
|
||||
@ -508,6 +508,15 @@ void Fl_X11_Window_Driver::iconize() {
|
||||
XIconifyWindow(fl_display, fl_xid(pWindow), fl_screen);
|
||||
}
|
||||
|
||||
void Fl_X11_Window_Driver::decoration_sizes(int *top, int *left, int *right, int *bottom) {
|
||||
// Ensure border is on screen; these values are generic enough
|
||||
// to work with many window managers, and are based on KDE defaults.
|
||||
*top = 20;
|
||||
*left = 4;
|
||||
*right = 4;
|
||||
*bottom = 8;
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
Loading…
Reference in New Issue
Block a user