diff options
author | crupest <crupest@outlook.com> | 2021-10-22 20:51:24 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-10-22 20:51:24 +0800 |
commit | ed640ca9e3c7482856a0248ea38adafc86a7d4c8 (patch) | |
tree | e0813b201a460d104a5cb3cf6f8bbc02deef066c /src | |
parent | 0164c6ff9a736f35e50e24361ee63b19556b8885 (diff) | |
download | cru-ed640ca9e3c7482856a0248ea38adafc86a7d4c8.tar.gz cru-ed640ca9e3c7482856a0248ea38adafc86a7d4c8.tar.bz2 cru-ed640ca9e3c7482856a0248ea38adafc86a7d4c8.zip |
...
Diffstat (limited to 'src')
-rw-r--r-- | src/osx/graphics/quartz/Painter.cpp | 10 | ||||
-rw-r--r-- | src/osx/gui/Window.mm | 57 |
2 files changed, 46 insertions, 21 deletions
diff --git a/src/osx/graphics/quartz/Painter.cpp b/src/osx/graphics/quartz/Painter.cpp index 3f859571..406e3273 100644 --- a/src/osx/graphics/quartz/Painter.cpp +++ b/src/osx/graphics/quartz/Painter.cpp @@ -21,9 +21,9 @@ QuartzCGContextPainter::QuartzCGContextPainter( size_(size), on_end_draw_(std::move(on_end_draw)) { Expects(cg_context); - log::TagDebug(log_tag, - u"Created with CGContext: {}, Auto Release: {}, Size: {}.", - cg_context, auto_release, size_); + // log::TagDebug(log_tag, + // u"Created with CGContext: {}, Auto Release: {}, Size: {}.", + // cg_context, auto_release, size_); } QuartzCGContextPainter::~QuartzCGContextPainter() { @@ -53,7 +53,7 @@ void QuartzCGContextPainter::Clear(const Color& color) { color.GetFloatAlpha()); CGContextFillRect(cg_context_, Convert(Rect{Point{}, size_})); - log::TagDebug(log_tag, u"Clear with color {}, size {}.", color, size_); + // log::TagDebug(log_tag, u"Clear with color {}, size {}.", color, size_); } void QuartzCGContextPainter::DrawLine(const Point& start, const Point& end, @@ -159,7 +159,7 @@ void QuartzCGContextPainter::DoEndDraw() { if (cg_context_) { CGContextFlush(cg_context_); CGContextSynchronize(cg_context_); - log::TagDebug(log_tag, u"End draw and flush."); + // log::TagDebug(log_tag, u"End draw and flush."); on_end_draw_(this); } diff --git a/src/osx/gui/Window.mm b/src/osx/gui/Window.mm index f64c096a..1eb97b07 100644 --- a/src/osx/gui/Window.mm +++ b/src/osx/gui/Window.mm @@ -210,7 +210,7 @@ std::unique_ptr<graphics::IPainter> OsxWindow::BeginPaint() { return std::make_unique<cru::platform::graphics::osx::quartz::QuartzCGContextPainter>( GetUiApplication()->GetGraphicsFactory(), cg_context, false, GetClientSize(), [this](graphics::osx::quartz::QuartzCGContextPainter*) { - log::Debug(u"Finish painting and invalidate view."); + // log::Debug(u"Finish painting and invalidate view."); [[p_->window_ contentView] setNeedsDisplay:YES]; }); } @@ -320,7 +320,7 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho } - (void)drawRect:(NSRect)dirtyRect { - cru::log::TagDebug(u"CruView", u"Begin to draw layer in view."); + // cru::log::TagDebug(u"CruView", u"Begin to draw layer in view."); auto cg_context = [[NSGraphicsContext currentContext] CGContext]; auto layer = _p->GetDrawLayer(); Ensures(layer); @@ -427,7 +427,7 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho } - (void)keyDown:(NSEvent*)event { - cru::log::TagDebug(u"CruWindow", u"Recieved key down."); + cru::log::TagDebug(u"CruView", u"Recieved key down."); cru::platform::gui::KeyModifier key_modifier; if (event.modifierFlags & NSEventModifierFlagControl) @@ -448,7 +448,7 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho } - (void)keyUp:(NSEvent*)event { - cru::log::TagDebug(u"CruWindow", u"Recieved key up."); + cru::log::TagDebug(u"CruView", u"Recieved key up."); cru::platform::gui::KeyModifier key_modifier; if (event.modifierFlags & NSEventModifierFlagControl) @@ -460,12 +460,6 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho auto c = cru::platform::gui::osx::KeyCodeFromOsxToCru(event.keyCode); _p->OnKeyUp(c, key_modifier); - - if (dynamic_cast<cru::platform::gui::osx::OsxInputMethodContext*>( - _p->GetWindow()->GetInputMethodContext()) - ->IsEnabled()) { - [[self inputContext] handleEvent:event]; - } } - (BOOL)hasMarkedText { @@ -485,15 +479,30 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho - (void)setMarkedText:(id)string selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange { + CFStringRef s; + if ([string isKindOfClass:[NSString class]]) { + s = (CFStringRef)string; + } else { + auto as = (CFAttributedStringRef)string; + s = CFAttributedStringGetString(as); + } + + cru::log::TagDebug( + u"CruView", + u"Received setMarkedText string: {}, selected range: ({}, {}), replacement range: ({}, {}).", + Convert(s), selectedRange.location, selectedRange.length, replacementRange.location, + replacementRange.length); + if (_input_context_text == nil) { _input_context_text = [[NSMutableAttributedString alloc] init]; _input_context_p->RaiseCompositionStartEvent(); } - [_input_context_text deleteCharactersInRange:replacementRange]; + if (replacementRange.location == NSNotFound) replacementRange.location = 0; + [_input_context_text - insertAttributedString:[[NSAttributedString alloc] initWithString:(NSString*)string] - atIndex:replacementRange.location]; + replaceCharactersInRange:NSMakeRange(0, [_input_context_text length]) + withAttributedString:[[NSAttributedString alloc] initWithString:(NSString*)s]]; cru::platform::gui::CompositionText composition_text; composition_text.text = Convert((CFStringRef)[_input_context_text string]); @@ -517,14 +526,30 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho - (NSAttributedString*)attributedSubstringForProposedRange:(NSRange)range actualRange:(NSRangePointer)actualRange { - return [_input_context_text attributedSubstringFromRange:range]; + cru::Range r(range.location, range.length); + + r = r.CoerceInto(0, [_input_context_text length]); + + return [_input_context_text attributedSubstringFromRange:NSMakeRange(r.position, r.count)]; } - (void)insertText:(id)string replacementRange:(NSRange)replacementRange { + CFStringRef s; + if ([string isKindOfClass:[NSString class]]) { + s = (CFStringRef)string; + } else { + auto as = (CFAttributedStringRef)string; + s = CFAttributedStringGetString(as); + } + _input_context_text = nil; - cru::String s = Convert((CFStringRef)string); + cru::String ss = Convert(s); + + cru::log::TagDebug(u"CruView", u"Finish composition: {}, replacement range: ({}, {})", ss, + replacementRange.location, replacementRange.length); + _input_context_p->RaiseCompositionEndEvent(); - _input_context_p->RaiseTextEvent(s); + _input_context_p->RaiseTextEvent(ss); } - (NSUInteger)characterIndexForPoint:(NSPoint)point { |