get_window_position() + set_window_position() added

This commit is contained in:
hurikhan 2015-01-11 15:47:27 +08:00
parent 291d7992ce
commit ac558c15ea
6 changed files with 74 additions and 39 deletions

View file

@ -70,7 +70,7 @@ const char * OS_X11::get_video_driver_name(int p_driver) const {
}
OS::VideoMode OS_X11::get_default_video_mode() const {
return OS::VideoMode(0,0,800,600,false);
return OS::VideoMode(800,600,false);
}
int OS_X11::get_audio_driver_count() const {
@ -162,17 +162,6 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
// maybe contextgl wants to be in charge of creating the window
//print_line("def videomode "+itos(current_videomode.width)+","+itos(current_videomode.height));
#if defined(OPENGL_ENABLED) || defined(LEGACYGL_ENABLED)
if( current_videomode.x > current_videomode.width ||
current_videomode.y > current_videomode.height ||
current_videomode.width==0 ||
current_videomode.height==0) {
current_videomode.x = 0;
current_videomode.y = 0;
current_videomode.width = 640;
current_videomode.height = 480;
}
context_gl = memnew( ContextGL_X11( x11_display, x11_window,current_videomode, false ) );
context_gl->initialize();
@ -516,7 +505,7 @@ void OS_X11::set_wm_border(bool p_enabled) {
property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
XMapRaised(x11_display, x11_window);
XMoveResizeWindow(x11_display, x11_window, current_videomode.x, current_videomode.y, current_videomode.width, current_videomode.height);
XMoveResizeWindow(x11_display, x11_window, 0, 0, current_videomode.width, current_videomode.height);
}
void OS_X11::set_wm_fullscreen(bool p_enabled) {
@ -537,26 +526,65 @@ void OS_X11::set_wm_fullscreen(bool p_enabled) {
XSendEvent(x11_display, DefaultRootWindow(x11_display), False, SubstructureNotifyMask, &xev);
}
Point2 OS_X11::get_window_position() const {
int x,y;
XWindowAttributes xwa;
Window child;
XTranslateCoordinates( x11_display, x11_window, DefaultRootWindow(x11_display), 0, 0, &x, &y, &child);
XGetWindowAttributes(x11_display, x11_window, &xwa);
return Point2i(x,y);
}
void OS_X11::set_window_position(const Point2& p_position) {
// _NET_FRAME_EXTENTS
Atom property = XInternAtom(x11_display,"_NET_FRAME_EXTENTS", True);
Atom type;
int format;
unsigned long len;
unsigned long remaining;
unsigned char *data = NULL;
//long *extends;
int result;
result = XGetWindowProperty(
x11_display,
x11_window,
property,
0,
32,
False,
AnyPropertyType,
&type,
&format,
&len,
&remaining,
&data
);
long left = 0L;
long top = 0L;
if( result == Success ) {
long *extends = (long *) data;
left = extends[0];
top = extends[2];
XFree(data);
data = NULL;
}
XMoveWindow(x11_display,x11_window,p_position.x - left,p_position.y - top);
}
void OS_X11::set_fullscreen(bool p_enabled,int p_screen) {
if(p_enabled) {
XWindowAttributes xwa;
XGetWindowAttributes(x11_display, x11_window, &xwa);
print_line(itos(xwa.x));
print_line(itos(xwa.y));
print_line(itos(xwa.width));
print_line(itos(xwa.height));
current_videomode.x = xwa.x;
current_videomode.y = xwa.y;
current_videomode.width = xwa.width;
current_videomode.height = xwa.height;
pre_videomode = current_videomode;
// Get Desktop resolutuion
XWindowAttributes xwa;
XGetWindowAttributes(x11_display, DefaultRootWindow(x11_display), &xwa);
current_videomode.fullscreen = True;
@ -567,8 +595,6 @@ void OS_X11::set_fullscreen(bool p_enabled,int p_screen) {
set_wm_fullscreen(true);
} else {
current_videomode.fullscreen = False;
current_videomode.x = pre_videomode.x;
current_videomode.y = pre_videomode.y;
current_videomode.width = pre_videomode.width;
current_videomode.height = pre_videomode.height;

View file

@ -217,6 +217,8 @@ public:
virtual VideoMode get_video_mode(int p_screen=0) const;
virtual void get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen=0) const;
virtual Point2 get_window_position() const;
virtual void set_window_position(const Point2& p_position);
virtual void set_fullscreen(bool p_enabled,int p_screen=0);
virtual bool is_fullscreen() const;