vlc | branch: master | Marvin Scholz <epira...@gmail.com> | Sun Jun 5 11:28:25 2016 +0200| [4ff7e951c758162377aa33783c131c030de4a2b2] | committer: Felix Paul Kühne
macosx: Add VLCHUDTextFieldCell class This adds TextFieldCell to the dark HUD controls for use on HUD Panels Signed-off-by: Felix Paul Kühne <fkue...@videolan.org> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4ff7e951c758162377aa33783c131c030de4a2b2 --- modules/gui/macosx/VLCHUDTextFieldCell.h | 38 ++++++++ modules/gui/macosx/VLCHUDTextFieldCell.m | 143 ++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) diff --git a/modules/gui/macosx/VLCHUDTextFieldCell.h b/modules/gui/macosx/VLCHUDTextFieldCell.h new file mode 100644 index 0000000..00d5bcd --- /dev/null +++ b/modules/gui/macosx/VLCHUDTextFieldCell.h @@ -0,0 +1,38 @@ +/***************************************************************************** + * VLCHUDTextFieldCell.h: Custom textfield cell UI for dark HUD Panels + ***************************************************************************** + * Copyright (C) 2016 VLC authors and VideoLAN + * $Id$ + * + * Authors: Marvin Scholz <epirat07 -at- gmail -dot- com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#import <Cocoa/Cocoa.h> + +@interface VLCHUDTextFieldCell : NSTextFieldCell + +@property NSColor *enabledTextColor; +@property NSColor *disabledTextColor; + +@property CGFloat borderWidth; +@property NSColor *enabledBorderColor; +@property NSColor *disabledBorderColor; + +@property NSColor *enabledBackgroundColor; +@property NSColor *disabledBackgroundColor; + +@end diff --git a/modules/gui/macosx/VLCHUDTextFieldCell.m b/modules/gui/macosx/VLCHUDTextFieldCell.m new file mode 100644 index 0000000..1b779d3 --- /dev/null +++ b/modules/gui/macosx/VLCHUDTextFieldCell.m @@ -0,0 +1,143 @@ +/***************************************************************************** + * VLCHUDTextFieldCell.m: Custom textfield cell UI for dark HUD Panels + ***************************************************************************** + * Copyright (C) 2016 VLC authors and VideoLAN + * $Id$ + * + * Authors: Marvin Scholz <epirat07 -at- gmail -dot- com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#import "VLCHUDTextFieldCell.h" + +@implementation VLCHUDTextFieldCell { + BOOL myCustomDrawsBackground; + BOOL myCustomDrawsBorder; +} + +- (instancetype) initWithCoder:(NSCoder *)coder +{ + self = [super initWithCoder:coder]; + if (self) { + [self setupSelf]; + } + + return self; +} + +- (instancetype) initTextCell:(NSString *)aString +{ + self = [super initTextCell:aString]; + if (self) { + [self setupSelf]; + } + + return self; +} + +- (instancetype) initImageCell:(NSImage *)image +{ + self = [super initImageCell:image]; + if (self) { + [self setupSelf]; + } + + return self; +} + +- (void)setupSelf +{ + myCustomDrawsBorder = self.bordered || self.bezeled; + myCustomDrawsBackground = self.drawsBackground; + _enabledTextColor = [NSColor greenColor]; + _disabledTextColor = [NSColor blueColor]; + _enabledBorderColor = [NSColor yellowColor]; + _disabledBorderColor = [NSColor greenColor]; + _enabledBackgroundColor = [NSColor purpleColor]; + _disabledBackgroundColor = [NSColor blackColor]; + _borderWidth = 1.0; + + /* Disable border, enable bezeled, disable background + * in case we need background (TextField instead of Label) + * + * This is kind of redundant, as enabling bezeled will + * disable bordered anyway, but I've done it for clarity. + * + * ORDER IS IMPORTANT! + * Disabling background and enabling bezeled afterwards + * will re-enable background! + */ + if (self.drawsBackground) { + [self setBordered:NO]; + [self setBezeled:YES]; + [self setDrawsBackground:NO]; + } else { + [self setBordered:NO]; + [self setBezeled:NO]; + [self setDrawsBackground:NO]; + } +} + +- (NSText *)setUpFieldEditorAttributes:(NSText *)text +{ + NSText *newText = [super setUpFieldEditorAttributes:text]; + + // Set the text color for entered text + [newText setTextColor:_enabledTextColor]; + + // Set the cursor color + [(NSTextView *)newText setInsertionPointColor:_enabledTextColor]; + return newText; +} + + +- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView +{ + NSRect borderRect = NSInsetRect(cellFrame, _borderWidth, _borderWidth); + + if (self.enabled) { + [_enabledBackgroundColor setFill]; + [_enabledBorderColor setStroke]; + [self setTextColor:_enabledTextColor]; + } else { + [_disabledBackgroundColor setFill]; + [_disabledBorderColor setStroke]; + [self setTextColor:_disabledTextColor]; + } + + // Draw background + if (myCustomDrawsBackground) { + NSRectFill(cellFrame); + } + + // Draw Border + if (myCustomDrawsBorder) { + NSBezierPath *borderPath = [NSBezierPath bezierPathWithRect:borderRect]; + [borderPath setLineWidth:_borderWidth]; + [borderPath stroke]; + } + + /* Call draw interior to position text correctly + * + * For this to work, bezeled has to be enabled and drawsBackground + * needs to be disabled, else we still get a background drawn. + * When using bordered instead of bezeled, we get wrong cursor position. + */ + [self drawInteriorWithFrame:cellFrame inView:controlView]; +} + + +@end _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits