CtrlCore: Undocumented Cocoa cursors

git-svn-id: svn://ultimatepp.org/upp/trunk@12110 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2018-07-28 12:57:24 +00:00
parent eab9dec6b9
commit 93768f36f1
4 changed files with 49 additions and 22 deletions

View file

@ -217,7 +217,7 @@ Upp::Rect Upp::Ctrl::GetPrimaryWorkArea()
for (NSScreen *screen in [NSScreen screens]) {
Rect f = MakeRect([screen frame]);
Rect v = MakeRect([screen visibleFrame], f.GetHeight());
// double scale = [screen backingScaleFactor];
// double scale = [screen backingScaleFactor]; // TODO DPI
return v;
}
return Rect(0, 0, 1024, 768);

View file

@ -116,11 +116,11 @@ void Upp::Ctrl::WndDestroy()
delete top->coco;
delete top;
top = NULL;
isopen = false;
popup = isopen = false;
int ii = FindIndex(mmtopctrl, this);
if(ii >= 0)
mmtopctrl.Remove(ii);
if(owner)
if(owner && owner->IsOpen())
owner->SetWndFocus();
}
@ -157,6 +157,7 @@ bool Upp::Ctrl::IsWndOpen() const {
void Upp::Ctrl::PopUp(Ctrl *owner, bool savebits, bool activate, bool dropshadow, bool topmost)
{
Create(owner, NSWindowStyleMaskBorderless, false);
popup = true;
}
Upp::dword Upp::TopWindow::GetMMStyle() const

View file

@ -108,34 +108,60 @@ Image Image::Cross() FCURSOR_(MM_Cross)
Image Image::Hand() FCURSOR_(MM_Hand)
// TODO: Missing kinds (sizers mostly)
// https://stackoverflow.com/questions/10733228/native-osx-lion-resize-cursor-for-custom-nswindow-or-nsview/21786835#21786835
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
#define XCURSOR(id) \
if([NSCursor respondsToSelector:@selector(id)]) return [NSCursor performSelector:@selector(id)];
NSCursor *GetNSCursor(int kind)
{
switch(kind) {
case MM_SizeAll:
XCURSOR(_moveCursor);
break;
case MM_SizeHorz:
XCURSOR(_windowResizeEastWestCursor);
break;
case MM_SizeVert:
XCURSOR(_windowResizeNorthSouthCursor);
break;
case MM_SizeTopLeft:
XCURSOR(_windowResizeNorthWestCursor);
break;
case MM_SizeTop:
XCURSOR(_windowResizeNorthCursor);
break;
case MM_SizeTopRight:
XCURSOR(_windowResizeNorthEastCursor);
break;
case MM_SizeLeft:
XCURSOR(_windowResizeWestCursor);
break;
case MM_SizeRight:
XCURSOR(_windowResizeEastCursor);
break;
case MM_SizeBottomLeft:
XCURSOR(_windowResizeSouthWestCursor);
break;
case MM_SizeBottom:
XCURSOR(_windowResizeSouthCursor);
break;
case MM_SizeBottomRight:
XCURSOR(_windowResizeSouthEastCursor);
break;
case MM_IBeam: return [NSCursor IBeamCursor];
case MM_Cross: return [NSCursor crosshairCursor];
// case MM_: return [NSCursor closedHandCursor];
// case MM_Hand: return [NSCursor openHandCursor];
case MM_Hand: return [NSCursor pointingHandCursor];
// case MM_: return [NSCursor resizeLeftCursor];
// case MM_: return [NSCursor resizeRightCursor];
case MM_SizeRight:
case MM_SizeLeft: return [NSCursor resizeLeftRightCursor];
// case MM_: return [NSCursor resizeUpCursor];
// case MM_: return [NSCursor resizeDownCursor];
case MM_SizeTop:
case MM_SizeBottom:
return [NSCursor resizeUpDownCursor];
// case MM_: return [NSCursor IBeamCursorForVerticalLayout];.
case MM_No:
return [NSCursor operationNotAllowedCursor];
// case MM_: return [NSCursor dragLinkCursor];.
// case MM_: return [NSCursor dragCopyCursor];.
// case MM_: return [NSCursor contextualMenuCursor];
case MM_Hand: return [NSCursor pointingHandCursor];
case MM_No: return [NSCursor operationNotAllowedCursor];
}
return [NSCursor arrowCursor];
}
#pragma clang diagnostic pop
void Ctrl::SetMouseCursor(const Image& img)
{
int64 h = img.GetAuxData();

View file

@ -530,7 +530,7 @@ void MenuBar::PopUp(Ctrl *owner, Point p, Size rsz)
if(p.y + sz.cy > r.bottom) {
if(p.y - r.top > r.bottom - p.y) {
int y0;
if (parentmenu && parentmenu->GetActiveSubmenu() && parentmenu->submenuitem)
if (parentmenu && parentmenu->GetActiveSubmenu() && parentmenu->submenuitem)
y0 = parentmenu->submenuitem->GetScreenRect().BottomRight().y + 2 + rsz.cy;
else
y0 = p.y + rsz.cy;