aboutsummaryrefslogtreecommitdiff
path: root/src/osx/gui/Window.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/osx/gui/Window.mm')
-rw-r--r--src/osx/gui/Window.mm85
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 {