Browse Source

working keyboard input

pull/1977/head
Dan Walmsley 8 years ago
parent
commit
9e3dfa8bc0
  1. 31
      src/Avalonia.Native.OSX/window.mm
  2. 19
      src/Avalonia.Native/WindowImplBase.cs
  3. 1
      src/headers/avalonia-native.h

31
src/Avalonia.Native.OSX/window.mm

@ -233,6 +233,16 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
}
- (BOOL)isOpaque
{
return false;
}
- (BOOL)acceptsFirstResponder
{
return true;
}
- (BOOL)canBecomeKeyView
{
return true;
}
@ -365,6 +375,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
- (void)mouseEvent:(NSEvent *)event withType:(AvnRawMouseEventType) type
{
[self becomeFirstResponder];
auto localPoint = [self convertPoint:[event locationInWindow] toView:self];
auto avnPoint = [self toAvnPoint:localPoint];
auto point = [self translateLocalPoint:avnPoint];
@ -493,6 +504,11 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
auto modifiers = [self getModifiers:[event modifierFlags]];
_lastKeyHandled = _parent->BaseEvents->RawKeyEvent(type, timestamp, modifiers, key);
if (modifiers != 0)
{
_lastKeyHandled = true;
}
}
- (BOOL)performKeyEquivalent:(NSEvent *)event
@ -503,6 +519,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
- (void)keyDown:(NSEvent *)event
{
[self keyboardEvent:event withType:KeyDown];
[[self inputContext] handleEvent:event];
[super keyDown:event];
}
@ -535,11 +552,6 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
return (AvnInputModifiers)rv;
}
- (BOOL)acceptsFirstResponder
{
return true;
}
- (BOOL)hasMarkedText
{
return false;
@ -577,7 +589,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
- (void)insertText:(id)string replacementRange:(NSRange)replacementRange
{
// todo input text to avalonia
_lastKeyHandled = _parent->BaseEvents->RawTextInputEvent(0, [string UTF8String]);
}
- (NSUInteger)characterIndexForPoint:(NSPoint)point
@ -625,8 +637,13 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
-(void)becomeKeyWindow
{
[super becomeKeyWindow];
_parent->BaseEvents->Activated();
[super becomeKeyWindow];
}
- (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame
{
return true;
}
-(void)resignKeyWindow

19
src/Avalonia.Native/WindowImplBase.cs

@ -145,11 +145,17 @@ namespace Avalonia.Native
_parent.RawMouseEvent(type, timeStamp, modifiers, point, delta);
}
public bool RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key)
bool IAvnWindowBaseEvents.RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key)
{
return _parent.RawKeyEvent(type, timeStamp, modifiers, key);
}
bool IAvnWindowBaseEvents.RawTextInputEvent(uint timeStamp, string text)
{
return _parent.RawTextInputEvent(timeStamp, text);
}
void IAvnWindowBaseEvents.ScalingChanged(double scaling)
{
_parent._savedScaling = scaling;
@ -171,6 +177,15 @@ namespace Avalonia.Native
_native.Activate();
}
public bool RawTextInputEvent(uint timeStamp, string text)
{
var args = new RawTextInputEventArgs(_keyboard, timeStamp, text);
Input?.Invoke(args);
return args.Handled;
}
public bool RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key)
{
var args = new RawKeyEventArgs(_keyboard, timeStamp, (RawKeyEventType)type, (Key)key, (InputModifiers)modifiers);

1
src/headers/avalonia-native.h

@ -156,6 +156,7 @@ AVNCOM(IAvnWindowBaseEvents, 05) : IUnknown
AvnPoint point,
AvnVector delta) = 0;
virtual bool RawKeyEvent (AvnRawKeyEventType type, unsigned int timeStamp, AvnInputModifiers modifiers, unsigned int key) = 0;
virtual bool RawTextInputEvent (unsigned int timeStamp, const char* text) = 0;
virtual void ScalingChanged(double scaling) = 0;
virtual void RunRenderPriorityJobs() = 0;
};

Loading…
Cancel
Save