[vlc-devel] [PATCH 3/9] macosx: Add VLCHUDTextFieldCell class
Marvin Scholz
epirat07 at gmail.com
Sun Jun 5 11:28:25 CEST 2016
This adds TextFieldCell to the dark HUD controls for
use on HUD Panels
---
modules/gui/macosx/VLCHUDTextFieldCell.h | 38 ++++++++
modules/gui/macosx/VLCHUDTextFieldCell.m | 143 +++++++++++++++++++++++++++++++
2 files changed, 181 insertions(+)
create mode 100644 modules/gui/macosx/VLCHUDTextFieldCell.h
create mode 100644 modules/gui/macosx/VLCHUDTextFieldCell.m
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>
+
+ at interface VLCHUDTextFieldCell : NSTextFieldCell
+
+ at property NSColor *enabledTextColor;
+ at property NSColor *disabledTextColor;
+
+ at property CGFloat borderWidth;
+ at property NSColor *enabledBorderColor;
+ at property NSColor *disabledBorderColor;
+
+ at property NSColor *enabledBackgroundColor;
+ at property NSColor *disabledBackgroundColor;
+
+ at 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"
+
+ at 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];
+}
+
+
+ at end
--
2.7.4 (Apple Git-66)
More information about the vlc-devel
mailing list