diff --git a/uppsrc/Core/Mt.cpp b/uppsrc/Core/Mt.cpp index 53ea5c805..cb9314856 100644 --- a/uppsrc/Core/Mt.cpp +++ b/uppsrc/Core/Mt.cpp @@ -1,5 +1,13 @@ #include "Core.h" +#ifdef PLATFORM_OSX +#include +#endif + +#ifdef CPU_X86 +#include +#endif + namespace Upp { #define LLOG(x) // DLOG(x) @@ -610,17 +618,13 @@ RWMutex::~RWMutex() pthread_rwlock_destroy(rwlock); } -#ifdef PLATFORM_OSX -#include -#endif - bool ConditionVariable::Wait(Mutex& m, int timeout_ms) { if(timeout_ms < 0) { pthread_cond_wait(cv, m.mutex); return true; } - struct timespec until; + ::timespec until; clock_gettime(CLOCK_REALTIME, &until); until.tv_sec += timeout_ms / 1000; @@ -722,10 +726,6 @@ LazyUpdate::LazyUpdate() dirty = true; } -#ifdef CPU_X86 -#include -#endif - void SpinLock::Wait() { volatile int n = 0; diff --git a/uppsrc/CtrlCore/CocoApp.mm b/uppsrc/CtrlCore/CocoApp.mm index 579f0df2e..9ed770a63 100644 --- a/uppsrc/CtrlCore/CocoApp.mm +++ b/uppsrc/CtrlCore/CocoApp.mm @@ -294,23 +294,7 @@ void Ctrl::SyncCaret() { Rect Ctrl::GetWorkArea() const { - return GetPrimaryWorkArea(); -} - -void Ctrl::GetWorkArea(Array& rc) -{ - GuiLock __; - rc.Add(GetPrimaryWorkArea()); -} - -Rect Ctrl::GetVirtualWorkArea() -{ - return GetPrimaryWorkArea(); -} - -Rect Ctrl::GetVirtualScreenArea() -{ - return GetPrimaryWorkArea(); + return GetWorkArea(GetScreenRect().TopLeft()); } Rect MakeScreenRect(NSScreen *screen, CGRect r) @@ -319,18 +303,53 @@ Rect MakeScreenRect(NSScreen *screen, CGRect r) return MakeRect(r, DPI(1)); } +void Ctrl::GetWorkArea(Array& rc) +{ + GuiLock __; + for(NSScreen *screen in [NSScreen screens]) + rc.Add(MakeScreenRect(screen, [screen visibleFrame])); +} + + +Rect Ctrl::GetVirtualWorkArea() +{ + Array rc; + GetWorkArea(rc); + Rect r(0, 0, 0, 0); + for(int i = 0; i < rc.GetCount(); i++) + if(i) + r = r | rc[i]; + else + r = rc[0]; + return r; +} + +Rect Ctrl::GetVirtualScreenArea() +{ + bool first = true; + Rect r(0, 0, 0, 0); + for(NSScreen *screen in [NSScreen screens]) { + Rect sr = MakeScreenRect(screen, [screen frame]); + if(first) + r = sr; + else + r = r | sr; + first = false; + } + return r; +} + Rect Ctrl::GetPrimaryWorkArea() { - for (NSScreen *screen in [NSScreen screens]) - return MakeScreenRect(screen, [screen visibleFrame]); - return Rect(0, 0, 1024, 768); + Array rc; + GetWorkArea(rc); + return rc.GetCount() ? rc[0] : Rect(0, 0, 0, 0); } Rect Ctrl::GetPrimaryScreenArea() { for (NSScreen *screen in [NSScreen screens]) return MakeScreenRect(screen, [screen frame]); - return Rect(0, 0, 1024, 768); } bool Ctrl::IsCompositedGui() diff --git a/uppsrc/CtrlLib/ChCocoMM.h b/uppsrc/CtrlLib/ChCocoMM.h index 4160c6fbf..447cbdb11 100644 --- a/uppsrc/CtrlLib/ChCocoMM.h +++ b/uppsrc/CtrlLib/ChCocoMM.h @@ -31,6 +31,6 @@ enum ChCocoNSColor { void Coco_ThemePaint(void *cgcontext, const Upp::Rect& where, int type, int value, int status, bool focus); -int Coco_Metric(int k); + int Coco_Metric(int k); #endif