mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
CtrlCore: MacOS fixed multimonitor issues
git-svn-id: svn://ultimatepp.org/upp/trunk@13964 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
3a70bbf65c
commit
1ef0071555
3 changed files with 50 additions and 31 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue