From 92b70f21110d85ef52df19cc29b7fe0eb4135f4d Mon Sep 17 00:00:00 2001 From: cxl Date: Sun, 30 Mar 2014 08:51:13 +0000 Subject: [PATCH] Core: Ctrl::GetMouseWorkArea() #725 git-svn-id: svn://ultimatepp.org/upp/trunk@7112 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CtrlCore/CtrlCore.h | 1 + uppsrc/CtrlCore/CtrlPos.cpp | 12 ++++++++++++ uppsrc/CtrlCore/GtkWnd.cpp | 11 ----------- uppsrc/CtrlCore/Win32Wnd.cpp | 10 ---------- uppsrc/CtrlCore/X11App.cpp | 11 ----------- uppsrc/CtrlCore/src.tpp/Ctrl$en-us.tpp | 13 +++++++++++++ uppsrc/CtrlLib/LabelBase.cpp | 2 +- uppsrc/CtrlLib/ToolTip.cpp | 6 +++--- 8 files changed, 30 insertions(+), 36 deletions(-) diff --git a/uppsrc/CtrlCore/CtrlCore.h b/uppsrc/CtrlCore/CtrlCore.h index 69056d4b2..20db10f05 100644 --- a/uppsrc/CtrlCore/CtrlCore.h +++ b/uppsrc/CtrlCore/CtrlCore.h @@ -1210,6 +1210,7 @@ public: static Rect GetPrimaryScreenArea(); static void GetWorkArea(Array& rc); static Rect GetWorkArea(Point pt); + static Rect GetMouseWorkArea() { return GetWorkArea(GetMousePos()); } static int GetKbdDelay(); static int GetKbdSpeed(); static bool IsAlphaSupported(); diff --git a/uppsrc/CtrlCore/CtrlPos.cpp b/uppsrc/CtrlCore/CtrlPos.cpp index cf6755900..f4693b4a4 100644 --- a/uppsrc/CtrlCore/CtrlPos.cpp +++ b/uppsrc/CtrlCore/CtrlPos.cpp @@ -487,4 +487,16 @@ Ctrl& Ctrl::VCenterPosZ(int size, int delta) { return VCenterPos(VertLayoutZoom(size), VertLayoutZoom(delta)); } +Rect Ctrl::GetWorkArea(Point pt) +{ + GuiLock __; + static Array rc; + if (rc.IsEmpty()) + GetWorkArea(rc); + for(int i = 0; i < rc.GetCount(); i++) + if(rc[i].Contains(pt)) + return rc[i]; + return GetPrimaryWorkArea(); +} + END_UPP_NAMESPACE diff --git a/uppsrc/CtrlCore/GtkWnd.cpp b/uppsrc/CtrlCore/GtkWnd.cpp index 88acdbdd6..d26bec428 100644 --- a/uppsrc/CtrlCore/GtkWnd.cpp +++ b/uppsrc/CtrlCore/GtkWnd.cpp @@ -267,17 +267,6 @@ void Ctrl::GetWorkArea(Array& rc) } } -Rect Ctrl::GetWorkArea(Point pt) -{ - static Array rc; - if(rc.IsEmpty()) - GetWorkArea(rc); - for(int i = 0; i < rc.GetCount(); i++) - if(rc[i].Contains(pt)) - return rc[i]; - return GetPrimaryWorkArea(); -} - Rect Ctrl::GetVirtualWorkArea() { GuiLock __; diff --git a/uppsrc/CtrlCore/Win32Wnd.cpp b/uppsrc/CtrlCore/Win32Wnd.cpp index b9a152f6f..1bd9b6051 100644 --- a/uppsrc/CtrlCore/Win32Wnd.cpp +++ b/uppsrc/CtrlCore/Win32Wnd.cpp @@ -1000,16 +1000,6 @@ Rect Ctrl::GetVirtualWorkArea() return out; } -Rect Ctrl::GetWorkArea(Point pt) -{ - Array rc; - GetWorkArea(rc); - for(int i = 0; i < rc.GetCount(); i++) - if(rc[i].Contains(pt)) - return rc[i]; - return GetPrimaryWorkArea(); -} - Rect Ctrl::GetVirtualScreenArea() { GuiLock __; diff --git a/uppsrc/CtrlCore/X11App.cpp b/uppsrc/CtrlCore/X11App.cpp index 24ff799bc..67dd45e8b 100644 --- a/uppsrc/CtrlCore/X11App.cpp +++ b/uppsrc/CtrlCore/X11App.cpp @@ -549,17 +549,6 @@ Rect Ctrl::GetWorkArea() const return GetPrimaryWorkArea(); } -Rect Ctrl::GetWorkArea(Point pt) -{ - static Array rc; - if (rc.IsEmpty()) - GetWorkArea(rc); - for(int i = 0; i < rc.GetCount(); i++) - if(rc[i].Contains(pt)) - return rc[i]; - return GetPrimaryWorkArea(); -} - Rect Ctrl::GetVirtualWorkArea() { GuiLock __; diff --git a/uppsrc/CtrlCore/src.tpp/Ctrl$en-us.tpp b/uppsrc/CtrlCore/src.tpp/Ctrl$en-us.tpp index 508933fb0..aa4d60434 100644 --- a/uppsrc/CtrlCore/src.tpp/Ctrl$en-us.tpp +++ b/uppsrc/CtrlCore/src.tpp/Ctrl$en-us.tpp @@ -2567,6 +2567,19 @@ ryScreenArea]()&] in Windows is the display with start menu.&] [s3;%- &] [s4;%- &] +[s5;:Ctrl`:`:GetWorkArea`(Point`):%- [@(0.0.255) static] [_^Rect^ Rect]_[* GetWorkArea]([_^Point^ P +oint]_[*@3 pt])&] +[s2; Returns the recangle of work area which contains [%-*@3 pt]. If +[%-*@3 pt] does not belong to any area, returns the primary work +area.&] +[s3; &] +[s4;%- &] +[s5;:Ctrl`:`:GetMouseWorkArea`(`):%- [@(0.0.255) static] [_^Rect^ Rect]_[* GetMouseWorkArea +]()&] +[s2; Returns the work are which contains mouse cursor. Same as GetWorkArea(GetMousePo +s()).&] +[s3;%- &] +[s4;%- &] [s5;:Ctrl`:`:GetKbdDelay`(`):%- [@(0.0.255) static] [@(0.0.255) int]_[* GetKbdDelay]()&] [s2;b17;a17; Returns delay of keyboard before autorepeat starts when key is pressed.&] diff --git a/uppsrc/CtrlLib/LabelBase.cpp b/uppsrc/CtrlLib/LabelBase.cpp index 51d027f77..30673d464 100644 --- a/uppsrc/CtrlLib/LabelBase.cpp +++ b/uppsrc/CtrlLib/LabelBase.cpp @@ -537,7 +537,7 @@ void DisplayPopup::Sync() r.Inflate(1, 1); r.Offset(ctrl->GetScreenView().TopLeft()); - Rect wa = GetWorkArea(); + Rect wa = GetWorkArea(r.BottomLeft()); Size sz = r.GetSize(); if(r.left < wa.left) { r.left = wa.left; diff --git a/uppsrc/CtrlLib/ToolTip.cpp b/uppsrc/CtrlLib/ToolTip.cpp index 9c391a1da..a0c8bd8ad 100644 --- a/uppsrc/CtrlLib/ToolTip.cpp +++ b/uppsrc/CtrlLib/ToolTip.cpp @@ -24,7 +24,7 @@ void ToolTip::Paint(Draw& w) void ToolTip::PopUp(Ctrl *owner, Point p, bool effect) { LLOG("ToolTip::PopUp" << Desc(owner) << " @ " << p); - Rect r = owner->GetWorkArea(); + Rect r = GetMouseWorkArea(); Size sz = GetMinSize(); p.x = max(p.x + sz.cx > r.right ? r.right - sz.cx : p.x, r.left); p.y = max(p.y + sz.cy > r.bottom ? r.bottom - sz.cy : p.y, r.top); @@ -73,7 +73,7 @@ void ShowToolTip() ToolTip& q = AppToolTip(); q.Set(text); Size sz = q.GetMinSize(); - Rect r = top->GetWorkArea(); + Rect r = Ctrl::GetMouseWorkArea(); Point p = GetMousePos() + Size(0, 22); if(p.y + sz.cy > r.bottom) p = GetMousePos() - Size(0, 22); @@ -184,7 +184,7 @@ void QTFPopUp::PopUp(Ctrl *parent) { Rect r = Rect(0, 0, width, maxheight); GetFrame().FrameLayout(r); int cy = min(maxheight, GetHeight(r.Width()) + maxheight - r.Height()); - Rect area = GetWorkArea(); + Rect area = GetMouseWorkArea(); Point p = GetMousePos(); r.top = max(area.top, p.y + 16); r.bottom = r.top + cy;