CtrlCore: MacOS fixed multimonitor issues

git-svn-id: svn://ultimatepp.org/upp/trunk@13964 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2020-02-03 14:19:41 +00:00
parent 3a70bbf65c
commit 1ef0071555
3 changed files with 50 additions and 31 deletions

View file

@ -1,5 +1,13 @@
#include "Core.h"
#ifdef PLATFORM_OSX
#include <sys/time.h>
#endif
#ifdef CPU_X86
#include <xmmintrin.h>
#endif
namespace Upp {
#define LLOG(x) // DLOG(x)
@ -610,17 +618,13 @@ RWMutex::~RWMutex()
pthread_rwlock_destroy(rwlock);
}
#ifdef PLATFORM_OSX
#include <time.h>
#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 <xmmintrin.h>
#endif
void SpinLock::Wait()
{
volatile int n = 0;

View file

@ -294,23 +294,7 @@ void Ctrl::SyncCaret() {
Rect Ctrl::GetWorkArea() const
{
return GetPrimaryWorkArea();
}
void Ctrl::GetWorkArea(Array<Rect>& 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<Rect>& rc)
{
GuiLock __;
for(NSScreen *screen in [NSScreen screens])
rc.Add(MakeScreenRect(screen, [screen visibleFrame]));
}
Rect Ctrl::GetVirtualWorkArea()
{
Array<Rect> 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<Rect> 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()

View file

@ -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