diff options
-rw-r--r-- | demos/input_method/main.cpp | 11 | ||||
-rw-r--r-- | src/osx/graphics/quartz/Painter.cpp | 8 | ||||
-rw-r--r-- | src/osx/gui/Window.mm | 10 |
3 files changed, 20 insertions, 9 deletions
diff --git a/demos/input_method/main.cpp b/demos/input_method/main.cpp index 7c22783c..170e6dec 100644 --- a/demos/input_method/main.cpp +++ b/demos/input_method/main.cpp @@ -1,3 +1,4 @@ +#include "cru/platform/Color.hpp" #include "cru/platform/bootstrap/Bootstrap.hpp" #include "cru/platform/graphics/Factory.hpp" #include "cru/platform/graphics/Font.hpp" @@ -36,10 +37,10 @@ int main() { auto prompt_text_layout = graphics_factory->CreateTextLayout(font, - u"Alt+F1: Enable IME\n" - u"Alt+F2: Disable IME\n" - u"Alt+F3: Complete composition.\n" - u"Alt+F4: Cancel composition."); + u"Alt+F1: Enable IME\n" + u"Alt+F2: Disable IME\n" + u"Alt+F3: Complete composition.\n" + u"Alt+F4: Cancel composition."); std::optional<CompositionText> optional_composition_text; String committed_text; @@ -52,7 +53,7 @@ int main() { window->PaintEvent()->AddHandler([&](auto) { auto painter = window->BeginPaint(); - painter->Clear(colors::white); + painter->Clear(colors::blue); painter->DrawText(Point{}, prompt_text_layout.get(), brush.get()); 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]; |