diff options
Diffstat (limited to 'src/osx/gui/Window.mm')
-rw-r--r-- | src/osx/gui/Window.mm | 85 |
1 files changed, 64 insertions, 21 deletions
diff --git a/src/osx/gui/Window.mm b/src/osx/gui/Window.mm index cd1a70e6..da098d9b 100644 --- a/src/osx/gui/Window.mm +++ b/src/osx/gui/Window.mm @@ -269,22 +269,62 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho backing:NSBackingStoreBuffered defer:false]; _p = p; + + [self setAcceptsMouseMovedEvents:YES]; + + return self; +} +@end + +@implementation CruView { + cru::platform::gui::osx::details::OsxWindowPrivate* _p; +} + +- (instancetype)init:(cru::platform::gui::osx::details::OsxWindowPrivate*)p + frame:(cru::platform::Rect)frame { + [super initWithFrame:cru::platform::graphics::osx::quartz::Convert(frame)]; + _p = p; + return self; } +- (void)drawRect:(NSRect)dirtyRect { + cru::log::TagDebug(u"CruView", u"Begin to draw layer in view."); + auto cg_context = [[NSGraphicsContext currentContext] CGContext]; + auto layer = _p->GetDrawLayer(); + Ensures(layer); + CGContextDrawLayerAtPoint(cg_context, CGPointMake(0, 0), layer); +} + +- (BOOL)acceptsFirstResponder { + return YES; +} + +- (BOOL)canBecomeKeyView { + return YES; +} + - (void)mouseMoved:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved mouse move."); _p->OnMouseMove(cru::platform::Point(event.locationInWindow.x, event.locationInWindow.y)); + [super mouseMoved:event]; } - (void)mouseEntered:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved mouse enter."); _p->OnMouseEnterLeave(cru::platform::gui::MouseEnterLeaveType::Enter); + [super mouseEntered:event]; } - (void)mouseExited:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved mouse exit."); _p->OnMouseEnterLeave(cru::platform::gui::MouseEnterLeaveType::Leave); + [super mouseExited:event]; } - (void)mouseDown:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved mouse down."); + cru::platform::gui::KeyModifier key_modifier; if (event.modifierFlags & NSEventModifierFlagControl) key_modifier |= cru::platform::gui::KeyModifiers::ctrl; @@ -295,9 +335,12 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho cru::platform::Point p(event.locationInWindow.x, event.locationInWindow.y); _p->OnMouseDown(cru::platform::gui::mouse_buttons::left, p, key_modifier); + [super mouseDown:event]; } - (void)mouseUp:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved mouse up."); + cru::platform::gui::KeyModifier key_modifier; if (event.modifierFlags & NSEventModifierFlagControl) key_modifier |= cru::platform::gui::KeyModifiers::ctrl; @@ -308,9 +351,13 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho cru::platform::Point p(event.locationInWindow.x, event.locationInWindow.y); _p->OnMouseUp(cru::platform::gui::mouse_buttons::left, p, key_modifier); + + [super mouseUp:event]; } - (void)rightMouseDown:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved right mouse down."); + cru::platform::gui::KeyModifier key_modifier; if (event.modifierFlags & NSEventModifierFlagControl) key_modifier |= cru::platform::gui::KeyModifiers::ctrl; @@ -321,9 +368,13 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho cru::platform::Point p(event.locationInWindow.x, event.locationInWindow.y); _p->OnMouseDown(cru::platform::gui::mouse_buttons::right, p, key_modifier); + + [super rightMouseDown:event]; } - (void)rightMouseUp:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved right mouse up."); + cru::platform::gui::KeyModifier key_modifier; if (event.modifierFlags & NSEventModifierFlagControl) key_modifier |= cru::platform::gui::KeyModifiers::ctrl; @@ -334,9 +385,13 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho cru::platform::Point p(event.locationInWindow.x, event.locationInWindow.y); _p->OnMouseUp(cru::platform::gui::mouse_buttons::right, p, key_modifier); + + [super rightMouseUp:event]; } - (void)scrollWheel:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved mouse wheel."); + cru::platform::gui::KeyModifier key_modifier; if (event.modifierFlags & NSEventModifierFlagControl) key_modifier |= cru::platform::gui::KeyModifiers::ctrl; @@ -347,9 +402,13 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho cru::platform::Point p(event.locationInWindow.x, event.locationInWindow.y); _p->OnMouseWheel(static_cast<float>(event.scrollingDeltaY), p, key_modifier); + + [super scrollWheel:event]; } - (void)keyDown:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved key down."); + cru::platform::gui::KeyModifier key_modifier; if (event.modifierFlags & NSEventModifierFlagControl) key_modifier |= cru::platform::gui::KeyModifiers::ctrl; @@ -360,9 +419,13 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho auto c = cru::platform::gui::osx::KeyCodeFromOsxToCru(event.keyCode); _p->OnKeyDown(c, key_modifier); + + [super keyDown:event]; } - (void)keyUp:(NSEvent*)event { + cru::log::TagDebug(u"CruView", u"Recieved key up."); + cru::platform::gui::KeyModifier key_modifier; if (event.modifierFlags & NSEventModifierFlagControl) key_modifier |= cru::platform::gui::KeyModifiers::ctrl; @@ -373,29 +436,9 @@ IInputMethodContext* OsxWindow::GetInputMethodContext() { return p_->input_metho auto c = cru::platform::gui::osx::KeyCodeFromOsxToCru(event.keyCode); _p->OnKeyUp(c, key_modifier); -} -@end - -@implementation CruView { - cru::platform::gui::osx::details::OsxWindowPrivate* _p; -} -- (instancetype)init:(cru::platform::gui::osx::details::OsxWindowPrivate*)p - frame:(cru::platform::Rect)frame { - [super initWithFrame:cru::platform::graphics::osx::quartz::Convert(frame)]; - _p = p; - - return self; + [super keyUp:event]; } - -- (void)drawRect:(NSRect)dirtyRect { - cru::log::TagDebug(u"CruView", u"Begin to draw layer in view."); - auto cg_context = [[NSGraphicsContext currentContext] CGContext]; - auto layer = _p->GetDrawLayer(); - Ensures(layer); - CGContextDrawLayerAtPoint(cg_context, CGPointMake(0, 0), layer); -} - @end @implementation CruWindowDelegate { |