You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.2 KiB
143 lines
4.2 KiB
/*****************************************************************************
|
|
* 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
|
|
|