From 045143e982a1c25d4b51e008d43c9da752fa5c11 Mon Sep 17 00:00:00 2001 From: cxl Date: Wed, 15 Apr 2020 20:32:48 +0000 Subject: [PATCH] CtrlCore: MacOS theoretical TopFrameDraw implementation (does not work because of MacOS issue) git-svn-id: svn://ultimatepp.org/upp/trunk@14318 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CtrlCore/Coco.h | 4 +++- uppsrc/CtrlCore/CocoAfter.h | 6 +++--- uppsrc/CtrlCore/CocoApp.mm | 10 +++++----- uppsrc/CtrlCore/CtrlCore.h | 4 +++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/uppsrc/CtrlCore/Coco.h b/uppsrc/CtrlCore/Coco.h index 5fa81107e..81023608c 100644 --- a/uppsrc/CtrlCore/Coco.h +++ b/uppsrc/CtrlCore/Coco.h @@ -66,7 +66,7 @@ private: friend class ImageDraw; friend class BackDraw; - friend class ViewDraw; + friend class TopFrameDraw; friend struct BackDraw__; public: @@ -174,3 +174,5 @@ friend struct MMImp; }; #define GUIPLATFORM_INCLUDE_AFTER + +#define HAS_TopFrameDraw diff --git a/uppsrc/CtrlCore/CocoAfter.h b/uppsrc/CtrlCore/CocoAfter.h index a57b69622..24dde35fd 100644 --- a/uppsrc/CtrlCore/CocoAfter.h +++ b/uppsrc/CtrlCore/CocoAfter.h @@ -1,7 +1,7 @@ -class ViewDraw : public SystemDraw { +class TopFrameDraw : public SystemDraw { public: - ViewDraw(Ctrl *ctrl); - ~ViewDraw(); + TopFrameDraw(Ctrl *ctrl, const Rect& r); + ~TopFrameDraw(); }; Vector& coreCmdLine__(); diff --git a/uppsrc/CtrlCore/CocoApp.mm b/uppsrc/CtrlCore/CocoApp.mm index a44a5bf05..8a3a010b9 100644 --- a/uppsrc/CtrlCore/CocoApp.mm +++ b/uppsrc/CtrlCore/CocoApp.mm @@ -396,22 +396,22 @@ void MMCtrl::SyncRect(CocoView *view) view->ctrl->SetWndRect(MakeScreenRect([win screen], [win contentRectForFrameRect: [win frame]])); } -ViewDraw::ViewDraw(Ctrl *ctrl) +TopFrameDraw::TopFrameDraw(Ctrl *ctrl, const Rect& r) { EnterGuiMutex(); + ctrl = ctrl->GetTopCtrl(); ASSERT(ctrl->top->coco); - Rect tr = ctrl->GetTopCtrl()->GetScreenRect(); - Rect r = ctrl->GetScreenView(); + Rect tr = ctrl->GetScreenRect(); NSGraphicsContext *gc = [NSGraphicsContext graphicsContextWithWindow:ctrl->top->coco->window]; Init([gc CGContext], NULL); CGContextTranslateCTM(cgHandle, 0, tr.GetHeight()); CGContextScaleCTM(cgHandle, 1, -1); - Clipoff(Rect(r.TopLeft() - tr.TopLeft(), r.GetSize())); + Clipoff(r); } -ViewDraw::~ViewDraw() +TopFrameDraw::~TopFrameDraw() { End(); CGContextFlush(cgHandle); diff --git a/uppsrc/CtrlCore/CtrlCore.h b/uppsrc/CtrlCore/CtrlCore.h index 485269386..41db8e9db 100644 --- a/uppsrc/CtrlCore/CtrlCore.h +++ b/uppsrc/CtrlCore/CtrlCore.h @@ -675,6 +675,7 @@ private: friend dword GetKeyStateSafe(dword what); friend void CtrlSetDefaultSkin(void (*_skin)()); friend class DHCtrl; + friend class TopFrameDraw; friend class ViewDraw; friend class TopWindow; friend class TrayIcon; @@ -1667,7 +1668,8 @@ T *Ctrl::GetAscendant() const #ifdef HAS_TopFrameDraw -struct ViewDraw : public TopFrameDraw { +class ViewDraw : public TopFrameDraw { +public: ViewDraw(Ctrl *ctrl, const Rect& r); ViewDraw(Ctrl *ctrl) : ViewDraw(ctrl, ctrl->GetSize()) {} ViewDraw(Ctrl *ctrl, int x, int y, int cx, int cy) : ViewDraw(ctrl, RectC(x, y, cx, cy)) {}