mirror of https://github.com/axmolengine/axmol.git
Added Secure input for CCEditBox on Mac
[NEW]: Implemented NSSecureTextField when CCEditBox inputFlag is set to Password [FIX]: Cleanup CCEditBoxMac. CCCustomNSTextField class is not needed.
This commit is contained in:
parent
111df3474c
commit
9fa30f2c61
|
@ -36,21 +36,16 @@
|
|||
#include "extensions/ExtensionMacros.h"
|
||||
#include "CCEditBoxImpl.h"
|
||||
|
||||
@interface CCCustomNSTextField : NSTextField
|
||||
{
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface CCEditBoxImplMac : NSObject <NSTextFieldDelegate>
|
||||
{
|
||||
CCCustomNSTextField* textField_;
|
||||
void* editBox_;
|
||||
BOOL editState_;
|
||||
NSMutableDictionary* placeholderAttributes_;
|
||||
}
|
||||
|
||||
@property(nonatomic, retain) NSTextField* textField;
|
||||
@property(nonatomic, retain) NSSecureTextField* secureTextField;
|
||||
@property(nonatomic, retain) NSMutableDictionary* placeholderAttributes;
|
||||
@property(nonatomic, readonly, getter = isEditState) BOOL editState;
|
||||
@property(nonatomic, assign) void* editBox;
|
||||
|
|
|
@ -38,29 +38,10 @@
|
|||
|
||||
|
||||
|
||||
@implementation CCCustomNSTextField
|
||||
|
||||
- (CGRect)textRectForBounds:(CGRect)bounds {
|
||||
float padding = 5.0f;
|
||||
return CGRectMake(bounds.origin.x + padding, bounds.origin.y + padding,
|
||||
bounds.size.width - padding*2, bounds.size.height - padding*2);
|
||||
}
|
||||
- (CGRect)editingRectForBounds:(CGRect)bounds {
|
||||
return [self textRectForBounds:bounds];
|
||||
}
|
||||
|
||||
- (void)setup {
|
||||
[self setBordered:NO];
|
||||
[self setHidden:NO];
|
||||
[self setWantsLayer:YES];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation CCEditBoxImplMac
|
||||
|
||||
@synthesize textField = textField_;
|
||||
@synthesize secureTextField = secureTextField_;
|
||||
@synthesize placeholderAttributes = placeholderAttributes_;
|
||||
@synthesize editState = editState_;
|
||||
@synthesize editBox = editBox_;
|
||||
|
@ -75,7 +56,12 @@
|
|||
{
|
||||
[textField_ resignFirstResponder];
|
||||
[textField_ removeFromSuperview];
|
||||
self.textField = NULL;
|
||||
[textField_ release];
|
||||
|
||||
[secureTextField_ resignFirstResponder];
|
||||
[secureTextField_ removeFromSuperview];
|
||||
[secureTextField_ release];
|
||||
|
||||
[placeholderAttributes_ release];
|
||||
[super dealloc];
|
||||
}
|
||||
|
@ -84,18 +70,19 @@
|
|||
{
|
||||
self = [super init];
|
||||
|
||||
do
|
||||
if (self)
|
||||
{
|
||||
if (self == nil) break;
|
||||
editState_ = NO;
|
||||
self.textField = [[[CCCustomNSTextField alloc] initWithFrame: frameRect] autorelease];
|
||||
if (!textField_) break;
|
||||
self.textField = [[[NSTextField alloc] initWithFrame:frameRect] autorelease];
|
||||
self.secureTextField = [[[NSSecureTextField alloc] initWithFrame:frameRect] autorelease];
|
||||
|
||||
NSFont *font = [NSFont systemFontOfSize:frameRect.size.height*2/3]; //TODO need to delete hard code here.
|
||||
textField_.textColor = [NSColor whiteColor];
|
||||
textField_.font = font;
|
||||
textField_.backgroundColor = [NSColor clearColor];
|
||||
[textField_ setup];
|
||||
textField_.delegate = self;
|
||||
secureTextField_.font = font;
|
||||
|
||||
[self setupTextField:textField_];
|
||||
[self setupTextField:secureTextField_];
|
||||
|
||||
self.editBox = editBox;
|
||||
self.placeholderAttributes = [NSMutableDictionary dictionaryWithObjectsAndKeys:
|
||||
font, NSFontAttributeName,
|
||||
|
@ -103,11 +90,19 @@
|
|||
nil];
|
||||
|
||||
[[[self getNSWindow] contentView] addSubview:textField_];
|
||||
}
|
||||
|
||||
return self;
|
||||
}while(0);
|
||||
return self;
|
||||
}
|
||||
|
||||
return nil;
|
||||
- (void)setupTextField:(NSTextField *)textField
|
||||
{
|
||||
[textField setTextColor:[NSColor whiteColor]];
|
||||
[textField setBackgroundColor:[NSColor clearColor]];
|
||||
[textField setBordered:NO];
|
||||
[textField setHidden:NO];
|
||||
[textField setWantsLayer:YES];
|
||||
[textField setDelegate:self];
|
||||
}
|
||||
|
||||
-(void) doAnimationWhenKeyboardMoveWithDuration:(float)duration distance:(float)distance
|
||||
|
@ -120,6 +115,7 @@
|
|||
NSRect frame = [textField_ frame];
|
||||
frame.origin = pos;
|
||||
[textField_ setFrame:frame];
|
||||
[secureTextField_ setFrame:frame];
|
||||
}
|
||||
|
||||
-(void) setContentSize:(NSSize) size
|
||||
|
@ -134,18 +130,29 @@
|
|||
|
||||
-(void) openKeyboard
|
||||
{
|
||||
[textField_ becomeFirstResponder];
|
||||
if ([textField_ superview]) {
|
||||
[textField_ becomeFirstResponder];
|
||||
}
|
||||
else {
|
||||
[secureTextField_ becomeFirstResponder];
|
||||
}
|
||||
}
|
||||
|
||||
-(void) closeKeyboard
|
||||
{
|
||||
[textField_ resignFirstResponder];
|
||||
[textField_ removeFromSuperview];
|
||||
if ([textField_ superview]) {
|
||||
[textField_ resignFirstResponder];
|
||||
[textField_ removeFromSuperview];
|
||||
}
|
||||
else {
|
||||
[secureTextField_ resignFirstResponder];
|
||||
[secureTextField_ removeFromSuperview];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)textFieldShouldReturn:(NSTextField *)sender
|
||||
{
|
||||
if (sender == textField_) {
|
||||
if (sender == textField_ || sender == secureTextField_) {
|
||||
[sender resignFirstResponder];
|
||||
}
|
||||
return NO;
|
||||
|
@ -301,8 +308,10 @@ void EditBoxImplMac::setFont(const char* pFontName, int fontSize)
|
|||
{
|
||||
NSString * fntName = [NSString stringWithUTF8String:pFontName];
|
||||
NSFont *textFont = [NSFont fontWithName:fntName size:fontSize];
|
||||
if(textFont != nil)
|
||||
if (textFont != nil) {
|
||||
[_sysEdit.textField setFont:textFont];
|
||||
[_sysEdit.secureTextField setFont:textFont];
|
||||
}
|
||||
}
|
||||
|
||||
void EditBoxImplMac::setPlaceholderFont(const char* pFontName, int fontSize)
|
||||
|
@ -326,7 +335,9 @@ void EditBoxImplMac::setPlaceholderFont(const char* pFontName, int fontSize)
|
|||
|
||||
void EditBoxImplMac::setFontColor(const Color3B& color)
|
||||
{
|
||||
_sysEdit.textField.textColor = [NSColor colorWithCalibratedRed:color.r / 255.0f green:color.g / 255.0f blue:color.b / 255.0f alpha:1.0f];
|
||||
NSColor *newColor = [NSColor colorWithCalibratedRed:color.r / 255.0f green:color.g / 255.0f blue:color.b / 255.0f alpha:1.0f];
|
||||
_sysEdit.textField.textColor = newColor;
|
||||
_sysEdit.secureTextField.textColor = newColor;
|
||||
}
|
||||
|
||||
void EditBoxImplMac::setPlaceholderFontColor(const Color3B& color)
|
||||
|
@ -357,7 +368,27 @@ int EditBoxImplMac::getMaxLength()
|
|||
|
||||
void EditBoxImplMac::setInputFlag(EditBox::InputFlag inputFlag)
|
||||
{
|
||||
// TODO: NSSecureTextField
|
||||
switch (inputFlag)
|
||||
{
|
||||
case EditBox::InputFlag::PASSWORD:
|
||||
[_sysEdit.textField.superview addSubview:_sysEdit.secureTextField];
|
||||
[_sysEdit.textField removeFromSuperview];
|
||||
break;
|
||||
case EditBox::InputFlag::INITIAL_CAPS_WORD:
|
||||
CCLOGWARN("INITIAL_CAPS_WORD not implemented");
|
||||
break;
|
||||
case EditBox::InputFlag::INITIAL_CAPS_SENTENCE:
|
||||
CCLOGWARN("INITIAL_CAPS_SENTENCE not implemented");
|
||||
break;
|
||||
case EditBox::InputFlag::INTIAL_CAPS_ALL_CHARACTERS:
|
||||
CCLOGWARN("INTIAL_CAPS_ALL_CHARACTERS not implemented");
|
||||
break;
|
||||
case EditBox::InputFlag::SENSITIVE:
|
||||
CCLOGWARN("SENSITIVE not implemented");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void EditBoxImplMac::setReturnType(EditBox::KeyboardReturnType returnType)
|
||||
|
@ -371,7 +402,9 @@ bool EditBoxImplMac::isEditing()
|
|||
|
||||
void EditBoxImplMac::setText(const char* pText)
|
||||
{
|
||||
_sysEdit.textField.stringValue = [NSString stringWithUTF8String:pText];
|
||||
NSString *string = [NSString stringWithUTF8String:pText];
|
||||
_sysEdit.textField.stringValue = string;
|
||||
_sysEdit.textField.stringValue = string;
|
||||
}
|
||||
|
||||
const char* EditBoxImplMac::getText(void)
|
||||
|
@ -385,6 +418,7 @@ void EditBoxImplMac::setPlaceHolder(const char* pText)
|
|||
attributes:_sysEdit.placeholderAttributes];
|
||||
|
||||
[[_sysEdit.textField cell] setPlaceholderAttributedString:as];
|
||||
[[_sysEdit.secureTextField cell] setPlaceholderAttributedString:as];
|
||||
[as release];
|
||||
}
|
||||
|
||||
|
@ -438,6 +472,7 @@ void EditBoxImplMac::setPosition(const Vec2& pos)
|
|||
void EditBoxImplMac::setVisible(bool visible)
|
||||
{
|
||||
[_sysEdit.textField setHidden:!visible];
|
||||
[_sysEdit.secureTextField setHidden:!visible];
|
||||
}
|
||||
|
||||
void EditBoxImplMac::setContentSize(const Size& size)
|
||||
|
|
Loading…
Reference in New Issue