From ce7c7a862ebe37fada7708c342c07d70fa80465a Mon Sep 17 00:00:00 2001 From: hurikhan Date: Tue, 13 Jan 2015 17:25:50 +0800 Subject: [PATCH] get_screen_position() added --- core/bind/core_bind.cpp | 5 +++++ core/bind/core_bind.h | 1 + core/os/os.h | 1 + demos/misc/window_management/control.gd | 11 ++++++++--- .../window_management/window_management.scn | Bin 3276 -> 3582 bytes platform/x11/os_x11.cpp | 12 ++++++++++++ platform/x11/os_x11.h | 1 + 7 files changed, 28 insertions(+), 3 deletions(-) diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index b8fc63dc43..a2aca7e11f 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -181,6 +181,10 @@ int _OS::get_screen_count() const { return OS::get_singleton()->get_screen_count(); } +Point2 _OS::get_screen_position(int p_screen) const { + return OS::get_singleton()->get_screen_position(p_screen); +} + Size2 _OS::get_screen_size(int p_screen) const { return OS::get_singleton()->get_screen_size(p_screen); } @@ -668,6 +672,7 @@ void _OS::_bind_methods() { #ifdef EXPERIMENTAL_WM_API ObjectTypeDB::bind_method(_MD("get_screen_count"),&_OS::get_screen_count); + ObjectTypeDB::bind_method(_MD("get_screen_position"),&_OS::get_screen_position,DEFVAL(0)); ObjectTypeDB::bind_method(_MD("get_screen_size"),&_OS::get_screen_size,DEFVAL(0)); ObjectTypeDB::bind_method(_MD("get_window_position"),&_OS::get_window_position); ObjectTypeDB::bind_method(_MD("set_window_position"),&_OS::set_window_position); diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index 62f9913556..9d9f25691e 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -110,6 +110,7 @@ public: #ifdef EXPERIMENTAL_WM_API virtual int get_screen_count() const; + virtual Point2 get_screen_position(int p_screen=0) const; virtual Size2 get_screen_size(int p_screen=0) const; virtual Point2 get_window_position() const; virtual void set_window_position(const Point2& p_position); diff --git a/core/os/os.h b/core/os/os.h index c2534287bc..1ef05e45c8 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -152,6 +152,7 @@ public: #ifdef EXPERIMENTAL_WM_API virtual int get_screen_count() const=0; + virtual Point2 get_screen_position(int p_screen=0) const=0; virtual Size2 get_screen_size(int p_screen=0) const=0; virtual Point2 get_window_position() const=0; virtual void set_window_position(const Point2& p_position)=0; diff --git a/demos/misc/window_management/control.gd b/demos/misc/window_management/control.gd index 3e74f24e42..ad15a74731 100644 --- a/demos/misc/window_management/control.gd +++ b/demos/misc/window_management/control.gd @@ -15,11 +15,16 @@ func _fixed_process(delta): get_node("Label_Screen0_Resolution").set_text( str("Screen0 Resolution:\n", OS.get_screen_size() ) ) + get_node("Label_Screen0_Position").set_text(str("Screen0 Position:\n",OS.get_screen_position())) + if(OS.get_screen_count() > 1): get_node("Label_Screen1_Resolution").show() - get_node("Label_Screen1_Resolution").set_text( str("Screen0 Resolution:\n", OS.get_screen_size(1) ) ) - - + get_node("Label_Screen1_Resolution").set_text( str("Screen1 Resolution:\n", OS.get_screen_size(1) ) ) + get_node("Label_Screen1_Position").show() + get_node("Label_Screen1_Position").set_text( str("Screen1 Position:\n", OS.get_screen_size(1) ) ) + else: + get_node("Label_Screen1_Resolution").hide() + get_node("Label_Screen1_Position").hide() func _ready(): set_fixed_process(true) diff --git a/demos/misc/window_management/window_management.scn b/demos/misc/window_management/window_management.scn index 6eaf62ff9f6a9cf0cff2b4e2d38f0441855b7035..3a6426f3ee9d00f23132c6fc321fcda325f6bf24 100644 GIT binary patch delta 2277 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 diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index e20d0731e1..01d62f333d 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -561,7 +561,19 @@ int OS_X11::get_screen_count() const { return XScreenCount(x11_display); } +Point2 OS_X11::get_screen_position(int p_screen) const { + if( p_screen >= XScreenCount(x11_display) ) + return Point2i(0,0); + + Window root = XRootWindow(x11_display, p_screen); + XWindowAttributes xwa; + XGetWindowAttributes(x11_display, root, &xwa); + return Point2i(xwa.x, xwa.y); +} + Size2 OS_X11::get_screen_size(int p_screen) const { + if( p_screen >= XScreenCount(x11_display) ) + return Size2i(0,0); Window root = XRootWindow(x11_display, p_screen); XWindowAttributes xwa; XGetWindowAttributes(x11_display, root, &xwa); diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h index 4aca996fdc..ca35bf2c0a 100644 --- a/platform/x11/os_x11.h +++ b/platform/x11/os_x11.h @@ -221,6 +221,7 @@ public: #ifdef EXPERIMENTAL_WM_API virtual int get_screen_count() const; + virtual Point2 get_screen_position(int p_screen=0) const; virtual Size2 get_screen_size(int p_screen=0) const; virtual Point2 get_window_position() const; virtual void set_window_position(const Point2& p_position);