mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 06:05:58 -06:00
105 lines
3.7 KiB
Text
105 lines
3.7 KiB
Text
#include <Core/config.h>
|
|
|
|
#ifdef PLATFORM_COCOA
|
|
|
|
#include <Carbon/Carbon.h>
|
|
|
|
#endif
|
|
|
|
#include <CtrlLib/CtrlLib.h>
|
|
|
|
#ifdef GUI_COCOA
|
|
|
|
#include <CtrlCore/CocoMM.h>
|
|
#include "ChCocoMM.h"
|
|
|
|
void Coco_PaintCh(void *cgcontext, int type, int value, int state)
|
|
{
|
|
auto dopaint = [&] {
|
|
auto cg = (CGContextRef) cgcontext;
|
|
if(Upp::IsUHDMode())
|
|
CGContextScaleCTM(cg, 2, 2);
|
|
CGRect cr = CGRectMake(0, 0, 140, 140);
|
|
if(type == COCO_NSCOLOR) {
|
|
CGContextSaveGState(cg);
|
|
CGContextSetFillColorWithColor(cg, Upp::decode(value,
|
|
COCO_PAPER, [NSColor textBackgroundColor].CGColor,
|
|
COCO_SELECTEDTEXT, [NSColor selectedTextColor].CGColor,
|
|
COCO_SELECTEDPAPER, [NSColor selectedTextBackgroundColor].CGColor,
|
|
COCO_DISABLED, [NSColor disabledControlTextColor].CGColor,
|
|
COCO_WINDOW, [NSColor windowBackgroundColor].CGColor,
|
|
COCO_SELECTEDMENUTEXT, [NSColor selectedMenuItemTextColor].CGColor,
|
|
[NSColor textColor].CGColor
|
|
));
|
|
CGContextFillRect(cg, cr);
|
|
CGContextRestoreGState(cg);
|
|
}
|
|
else
|
|
if(type == COCO_NSIMAGE) {
|
|
NSImage *img = [NSImage imageNamed:(value ? NSImageNameInfo : NSImageNameCaution)];
|
|
NSGraphicsContext *gc = [NSGraphicsContext graphicsContextWithCGContext:cg flipped:YES];
|
|
NSGraphicsContext* cgc = [NSGraphicsContext currentContext];
|
|
[NSGraphicsContext setCurrentContext:gc];
|
|
[img drawInRect:NSMakeRect(0, 0, 48, 48)];
|
|
[NSGraphicsContext setCurrentContext:cgc];
|
|
}
|
|
else {
|
|
CGContextSaveGState(cg);
|
|
[NSGraphicsContext saveGraphicsState];
|
|
[NSGraphicsContext setCurrentContext:
|
|
[NSGraphicsContext graphicsContextWithCGContext:cg flipped:YES]];
|
|
|
|
const CGRect dirtyRect = CGRectMake(20, 20, 100, 100);
|
|
|
|
if(Upp::findarg(type, COCO_SCROLLTHUMB, COCO_SCROLLTRACK) >= 0) {
|
|
int cx = [NSScroller scrollerWidthForControlSize:NSControlSizeRegular scrollerStyle:NSScrollerStyleLegacy];
|
|
NSScroller *scroller = [[NSScroller alloc] initWithFrame:NSMakeRect(0, 0, 100, cx)];
|
|
scroller.floatValue = 0;
|
|
scroller.knobProportion = 1;
|
|
scroller.knobStyle = NSScrollerKnobStyleDefault;
|
|
// scroller.knobStyle = Upp::IsDarkTheme() ? NSScrollerKnobStyleDark : NSScrollerKnobStyleLight;
|
|
scroller.scrollerStyle = NSScrollerStyleLegacy;
|
|
scroller.frame = cr;
|
|
if(type == COCO_SCROLLTHUMB)
|
|
[scroller drawKnob];
|
|
else
|
|
[scroller drawKnobSlotInRect:CGRectMake(20, 20, 100, cx) highlight:YES];
|
|
[scroller release];
|
|
}
|
|
else
|
|
if(type == COCO_TEXTFIELD) {
|
|
NSTextField *tf = [[NSTextField alloc] init];
|
|
tf.enabled = YES;
|
|
tf.editable = YES;
|
|
tf.bezeled = YES;
|
|
tf.frame = CGRectMake(0, 0, 140, 40);
|
|
[tf drawRect:dirtyRect];
|
|
[tf release];
|
|
}
|
|
else {
|
|
NSButton *bc = type == COCO_POPUPBUTTON ? [[NSPopUpButton alloc] init] : [[NSButton alloc] init];
|
|
bc.allowsMixedState = type == COCO_CHECKBOX;
|
|
bc.title = @"";
|
|
bc.controlSize = type == COCO_RADIOBUTTON ? NSControlSizeSmall : NSControlSizeRegular;
|
|
bc.frame = cr;
|
|
bc.buttonType = Upp::decode(type, COCO_CHECKBOX, NSButtonTypeSwitch, COCO_RADIOBUTTON, NSButtonTypeRadio, NSButtonTypePushOnPushOff);
|
|
bc.bezelStyle = type == COCO_BUTTON ? NSBezelStyleRounded : NSBezelStyleRegularSquare;
|
|
bc.state = Upp::decode(value, 0, NSControlStateValueOff, 1, NSControlStateValueOn, NSControlStateValueMixed);
|
|
[bc highlight: state == Upp::CTRL_PRESSED];
|
|
bc.enabled = state != Upp::CTRL_DISABLED;
|
|
[bc drawRect:dirtyRect];
|
|
[bc release];
|
|
}
|
|
|
|
[NSGraphicsContext restoreGraphicsState];
|
|
CGContextRestoreGState(cg);
|
|
}
|
|
};
|
|
if (@available(macOS 11.0, *)) {
|
|
[NSApp.effectiveAppearance performAsCurrentDrawingAppearance:^{ dopaint(); }];
|
|
} else {
|
|
dopaint();
|
|
}
|
|
}
|
|
|
|
#endif
|