From: Marvin Scholz Date: Sun, 5 Jun 2016 09:28:25 +0000 (+0200) Subject: macosx: Add VLCHUDTextFieldCell class X-Git-Tag: 3.0.0-git~7971 X-Git-Url: http://git.videolan.org/?p=vlc.git;a=commitdiff_plain;h=4ff7e951c758162377aa33783c131c030de4a2b2;hp=6c5599be797fafb24b1a86fb7fee520352746414;ds=sidebyside macosx: Add VLCHUDTextFieldCell class This adds TextFieldCell to the dark HUD controls for use on HUD Panels Signed-off-by: Felix Paul Kühne --- diff --git a/modules/gui/macosx/VLCHUDTextFieldCell.h b/modules/gui/macosx/VLCHUDTextFieldCell.h new file mode 100644 index 0000000000..00d5bcdfc6 --- /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 + * + * 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 + +@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 0000000000..1b779d3d74 --- /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 + * + * 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