diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/osx/graphics/quartz/Painter.cpp | 8 | ||||
-rw-r--r-- | src/osx/gui/Window.mm | 10 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/osx/graphics/quartz/Painter.cpp b/src/osx/graphics/quartz/Painter.cpp index 4771ca47..041184c6 100644 --- a/src/osx/graphics/quartz/Painter.cpp +++ b/src/osx/graphics/quartz/Painter.cpp @@ -8,6 +8,7 @@ namespace cru::platform::graphics::osx::quartz { QuartzCGContextPainter::~QuartzCGContextPainter() { + EndDraw(); if (auto_release_) { CGContextRelease(cg_context_); cg_context_ = nullptr; @@ -108,7 +109,12 @@ void QuartzCGContextPainter::PopLayer() { // TODO: Implement this. } -void QuartzCGContextPainter::EndDraw() { CGContextFlush(cg_context_); } +void QuartzCGContextPainter::EndDraw() { + if (cg_context_) { + CGContextFlush(cg_context_); + CGContextSynchronize(cg_context_); + } +} void QuartzCGContextPainter::Validate() { if (cg_context_ == nullptr) diff --git a/src/osx/gui/Window.mm b/src/osx/gui/Window.mm index dfe94d43..ce28e8a2 100644 --- a/src/osx/gui/Window.mm +++ b/src/osx/gui/Window.mm @@ -117,8 +117,8 @@ void OsxWindowPrivate::OnWindowWillClose() { graphics_context_ = nil; } -void OsxWindowPrivate::OnWindowDidExpose() { [window_ update]; } -void OsxWindowPrivate::OnWindowDidUpdate() { osx_window_->paint_event_.Raise(nullptr); } +void OsxWindowPrivate::OnWindowDidExpose() { osx_window_->RequestRepaint(); } +void OsxWindowPrivate::OnWindowDidUpdate() {} void OsxWindowPrivate::OnWindowDidResize() { osx_window_->resize_event_.Raise(osx_window_->GetClientSize()); @@ -126,6 +126,8 @@ void OsxWindowPrivate::OnWindowDidResize() { styleMask:CalcWindowStyleMask(frame_)]; content_rect_ = cru::platform::graphics::osx::quartz::Convert(rect); + + osx_window_->RequestRepaint(); } void OsxWindowPrivate::OnMouseEnterLeave(MouseEnterLeaveType type) { @@ -248,7 +250,9 @@ void OsxWindow::SetWindowRect(const Rect& rect) { } } -void OsxWindow::RequestRepaint() { [p_->window_ update]; } +void OsxWindow::RequestRepaint() { + GetUiApplication()->SetImmediate([this] { paint_event_.Raise(nullptr); }); +} std::unique_ptr<graphics::IPainter> OsxWindow::BeginPaint() { CGContextRef cg_context = [p_->graphics_context_ CGContext]; |