mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
CtrlCore: GtkWnd/X11App multimonitor support refactored
git-svn-id: svn://ultimatepp.org/upp/trunk@7074 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
374aedb86c
commit
948d37c820
2 changed files with 45 additions and 25 deletions
|
|
@ -228,7 +228,15 @@ void Ctrl::SetAlpha(byte alpha)
|
|||
Rect Ctrl::GetWorkArea() const
|
||||
{
|
||||
GuiLock __;
|
||||
return GetWorkArea(GetRect().TopLeft());
|
||||
static Array<Rect> rc;
|
||||
if(rc.IsEmpty())
|
||||
GetWorkArea(rc);
|
||||
|
||||
Point pt = GetScreenRect().TopLeft();
|
||||
for (int i = 0; i < rc.GetCount(); i++)
|
||||
if(rc[i].Contains(pt))
|
||||
return rc[i];
|
||||
return GetPrimaryWorkArea();
|
||||
}
|
||||
|
||||
void Ctrl::GetWorkArea(Array<Rect>& rc)
|
||||
|
|
@ -261,8 +269,9 @@ void Ctrl::GetWorkArea(Array<Rect>& rc)
|
|||
|
||||
Rect Ctrl::GetWorkArea(Point pt)
|
||||
{
|
||||
Array<Rect> rc;
|
||||
GetWorkArea(rc);
|
||||
static Array<Rect> rc;
|
||||
if(rc.IsEmpty())
|
||||
GetWorkArea(rc);
|
||||
for(int i = 0; i < rc.GetCount(); i++)
|
||||
if(rc[i].Contains(pt))
|
||||
return rc[i];
|
||||
|
|
@ -271,30 +280,46 @@ Rect Ctrl::GetWorkArea(Point pt)
|
|||
|
||||
Rect Ctrl::GetVirtualWorkArea()
|
||||
{
|
||||
Rect out = GetPrimaryWorkArea();
|
||||
Array<Rect> rc;
|
||||
GetWorkArea(rc);
|
||||
for(int i = 0; i < rc.GetCount(); i++)
|
||||
out |= rc[i];
|
||||
return out;
|
||||
GuiLock __;
|
||||
static Rect r;
|
||||
if(r.right == 0) {
|
||||
r = GetPrimaryWorkArea();
|
||||
Array<Rect> rc;
|
||||
GetWorkArea(rc);
|
||||
for(int i = 0; i < rc.GetCount(); i++)
|
||||
r |= rc[i];
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
Rect Ctrl::GetVirtualScreenArea()
|
||||
{
|
||||
GuiLock __;
|
||||
gint x, y, width, height;
|
||||
gdk_window_get_geometry(gdk_screen_get_root_window(gdk_screen_get_default()),
|
||||
&x, &y, &width, &height, NULL);
|
||||
return RectC(x, y, width, height);
|
||||
static Rect r;
|
||||
if(r.right == 0) {
|
||||
gint x, y, width, height;
|
||||
gdk_window_get_geometry(gdk_screen_get_root_window(gdk_screen_get_default()),
|
||||
&x, &y, &width, &height, NULL);
|
||||
r = RectC(x, y, width, height);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
Rect Ctrl::GetPrimaryWorkArea()
|
||||
{
|
||||
GuiLock __;
|
||||
int primary = gdk_screen_get_primary_monitor(gdk_screen_get_default());
|
||||
Array<Rect> rc;
|
||||
GetWorkArea(rc);
|
||||
return primary >= 0 && primary < rc.GetCount() ? rc[primary] : GetVirtualScreenArea();
|
||||
static Rect r;
|
||||
if (r.right == 0) {
|
||||
Array<Rect> rc;
|
||||
GetWorkArea(rc);
|
||||
#if GTK_CHECK_VERSION(2, 20, 0)
|
||||
int primary = gdk_screen_get_primary_monitor(gdk_screen_get_default());
|
||||
#else
|
||||
int primary = 0;
|
||||
#endif
|
||||
primary >= 0 && primary < rc.GetCount() ? r = rc[primary] : r = GetVirtualScreenArea();
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
Rect Ctrl::GetPrimaryScreenArea()
|
||||
|
|
|
|||
|
|
@ -489,7 +489,6 @@ Vector<Rect> FindScreensStruts()
|
|||
Rect Ctrl::GetDefaultWindowRect()
|
||||
{
|
||||
GuiLock __;
|
||||
|
||||
static int width = 0;
|
||||
static int height = 0;
|
||||
static int left = 0;
|
||||
|
|
@ -543,7 +542,7 @@ Rect Ctrl::GetWorkArea() const
|
|||
if (rc.IsEmpty())
|
||||
GetWorkArea(rc);
|
||||
|
||||
Point pt = GetMousePos();
|
||||
Point pt = GetScreenRect().TopLeft();
|
||||
for (int i = 0; i < rc.GetCount(); i++)
|
||||
if(rc[i].Contains(pt))
|
||||
return rc[i];
|
||||
|
|
@ -564,7 +563,6 @@ Rect Ctrl::GetWorkArea(Point pt)
|
|||
Rect Ctrl::GetVirtualWorkArea()
|
||||
{
|
||||
GuiLock __;
|
||||
|
||||
static Rect r;
|
||||
if(r.right == 0) {
|
||||
Vector<int> x = GetPropertyInts(Xroot, XAtom("_NET_WORKAREA"));
|
||||
|
|
@ -584,12 +582,10 @@ Rect Ctrl::GetVirtualScreenArea()
|
|||
Rect Ctrl::GetPrimaryWorkArea()
|
||||
{
|
||||
GuiLock __;
|
||||
|
||||
static Rect r;
|
||||
if(r.right == 0) {
|
||||
static Array<Rect> rc;
|
||||
if (rc.IsEmpty())
|
||||
GetWorkArea(rc);
|
||||
Array<Rect> rc;
|
||||
GetWorkArea(rc);
|
||||
rc.GetCount() ? r = rc[0] : r = GetVirtualScreenArea();
|
||||
}
|
||||
return r;
|
||||
|
|
@ -598,7 +594,6 @@ Rect Ctrl::GetPrimaryWorkArea()
|
|||
Rect Ctrl::GetPrimaryScreenArea()
|
||||
{
|
||||
GuiLock __;
|
||||
|
||||
static Rect r;
|
||||
if(r.right == 0) {
|
||||
Vector<Rect> screens = FindScreensResolutions();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue