Browse Source

More fixes

pull/11021/head
Benedikt Stebner 3 years ago
parent
commit
6da9f884de
  1. 86
      native/Avalonia.Native/src/OSX/AvnView.mm

86
native/Avalonia.Native/src/OSX/AvnView.mm

@ -12,7 +12,6 @@
{ {
ComPtr<WindowBaseImpl> _parent; ComPtr<WindowBaseImpl> _parent;
NSTrackingArea* _area; NSTrackingArea* _area;
NSMutableAttributedString* _markedText;
bool _isLeftPressed, _isMiddlePressed, _isRightPressed, _isXButton1Pressed, _isXButton2Pressed; bool _isLeftPressed, _isMiddlePressed, _isRightPressed, _isXButton1Pressed, _isXButton2Pressed;
AvnInputModifiers _modifierState; AvnInputModifiers _modifierState;
NSEvent* _lastMouseDownEvent; NSEvent* _lastMouseDownEvent;
@ -23,7 +22,8 @@
AvnAccessibilityElement* _accessibilityChild; AvnAccessibilityElement* _accessibilityChild;
NSRect _cursorRect; NSRect _cursorRect;
NSMutableAttributedString* _text; NSMutableAttributedString* _text;
NSRange _selection; NSRange _selectedRange;
NSRange _markedRange;
} }
- (void)onClosed - (void)onClosed
@ -61,8 +61,8 @@
_modifierState = AvnInputModifiersNone; _modifierState = AvnInputModifiersNone;
_text = [[NSMutableAttributedString alloc] initWithString:@""]; _text = [[NSMutableAttributedString alloc] initWithString:@""];
_markedText = [[NSMutableAttributedString alloc] initWithString:@""]; _markedRange = NSMakeRange(0, 0);
_selection = NSMakeRange(NSNotFound, 0); _selectedRange = NSMakeRange(0, 0);
return self; return self;
} }
@ -541,6 +541,10 @@
[super keyUp:event]; [super keyUp:event];
} }
- (void) doCommandBySelector:(SEL)selector{
}
- (AvnInputModifiers)getModifiers:(NSEventModifierFlags)mod - (AvnInputModifiers)getModifiers:(NSEventModifierFlags)mod
{ {
unsigned int rv = 0; unsigned int rv = 0;
@ -570,55 +574,52 @@
- (BOOL)hasMarkedText - (BOOL)hasMarkedText
{ {
return [_markedText length] > 0; return _markedRange.length > 0;
} }
- (NSRange)markedRange - (NSRange)markedRange
{ {
if([_markedText length] > 0) return _markedRange;
return NSMakeRange(_selection.location, [_markedText length]);
return NSMakeRange(NSNotFound, 0);
} }
- (NSRange)selectedRange - (NSRange)selectedRange
{ {
return _selection; return _selectedRange;
} }
- (void)setMarkedText:(id)string selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange - (void)setMarkedText:(id)string selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange
{ {
_lastKeyHandled = true; _lastKeyHandled = true;
NSString* markedText;
if([string isKindOfClass:[NSAttributedString class]]) if([string isKindOfClass:[NSAttributedString class]])
{ {
_markedText = [[NSMutableAttributedString alloc] initWithAttributedString:string]; markedText = [string string];
} }
else else
{ {
_markedText = [[NSMutableAttributedString alloc] initWithString:string]; markedText = (NSString*) string;
} }
if(!_parent->InputMethod->IsActive()){ _markedRange = NSMakeRange(_selectedRange.location, [markedText length]);
return;
if(_parent->InputMethod->IsActive()){
_parent->InputMethod->Client->SetPreeditText((char*)[markedText UTF8String]);
} }
_parent->InputMethod->Client->SetPreeditText((char*)[_markedText.string UTF8String]);
} }
- (void)unmarkText - (void)unmarkText
{ {
[[_markedText mutableString] setString:@""]; if(_parent->InputMethod->IsActive()){
_parent->InputMethod->Client->SetPreeditText(nullptr);
}
_markedRange = NSMakeRange(_selectedRange.location, 0);
if([self inputContext]) { if([self inputContext]) {
[[self inputContext] discardMarkedText]; [[self inputContext] discardMarkedText];
[[self inputContext] invalidateCharacterCoordinates];
}
if(!_parent->InputMethod->IsActive()){
return;
} }
_parent->InputMethod->Client->SetPreeditText(nullptr);
} }
- (NSArray<NSString *> *)validAttributesForMarkedText - (NSArray<NSString *> *)validAttributesForMarkedText
@ -628,21 +629,38 @@
- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)range actualRange:(NSRangePointer)actualRange - (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)range actualRange:(NSRangePointer)actualRange
{ {
return nullptr; if(actualRange){
range = *actualRange;
}
NSAttributedString* subString = [_text attributedSubstringFromRange:range];
return subString;
} }
- (void)insertText:(id)string replacementRange:(NSRange)replacementRange - (void)insertText:(id)string replacementRange:(NSRange)replacementRange
{ {
_lastKeyHandled = true; if(_parent == nullptr){
return;
}
if(_parent != nullptr) NSString* text;
{
uint32_t timestamp = static_cast<uint32_t>([NSDate timeIntervalSinceReferenceDate] * 1000);
_lastKeyHandled = _parent->BaseEvents->RawTextInputEvent(timestamp, [string UTF8String]); if([string isKindOfClass:[NSAttributedString class]])
{
text = [string string];
}
else
{
text = (NSString*) string;
} }
//[self unmarkText]; [self unmarkText];
uint32_t timestamp = static_cast<uint32_t>([NSDate timeIntervalSinceReferenceDate] * 1000);
_lastKeyHandled = _parent->BaseEvents->RawTextInputEvent(timestamp, [text UTF8String]);
} }
- (NSUInteger)characterIndexForPoint:(NSPoint)point - (NSUInteger)characterIndexForPoint:(NSPoint)point
@ -762,17 +780,11 @@
} }
- (void) setText:(NSString *)text{ - (void) setText:(NSString *)text{
[self unmarkText];
[[_text mutableString] setString:text]; [[_text mutableString] setString:text];
} }
- (void) setSelection:(int)start :(int)end{ - (void) setSelection:(int)start :(int)end{
_selection = NSMakeRange(start, end - start); _selectedRange = NSMakeRange(start, end - start);
if([self inputContext]) {
[[self inputContext] invalidateCharacterCoordinates];
}
} }
- (void) setCursorRect:(AvnRect)rect{ - (void) setCursorRect:(AvnRect)rect{

Loading…
Cancel
Save