aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/old/vlib/gg/gg_darwin.m
blob: d6bb5a148143c7548912fcc0988ac8fb6d982005 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <Cocoa/Cocoa.h>

NSColor* nscolor(gx__Color c) {
        float red= (float)c.r / 255.0f;
        float green= (float)c.g / 255.0f;
        float blue= (float)c.b / 255.0f;
        return [NSColor colorWithDeviceRed:red green:green blue:blue alpha:1.0f];
}

NSString* nsstring(string s) {
        return [ [ NSString alloc ] initWithBytesNoCopy:s.str  length:s.len
          encoding:NSUTF8StringEncoding freeWhenDone: false];
}


gg__Size gg_get_screen_size() {
	NSScreen *screen = [NSScreen mainScreen];
	NSDictionary *description = [screen deviceDescription];
	NSSize displayPixelSize = [[description objectForKey:NSDeviceSize] sizeValue];
	CGSize displayPhysicalSize = CGDisplayScreenSize(
		[[description objectForKey:@"NSScreenNumber"] unsignedIntValue]);
	gg__Size res;
	res.width = displayPixelSize.width;
	res.height = displayPixelSize.height;
	return res;
}

void darwin_draw_string(int x, int y, string s, gx__TextCfg cfg) {
	 NSFont*       font = [NSFont userFontOfSize: 0]; //cfg.size];
 // # NSFont*    font = [NSFont fontWithName:@"Roboto Mono" size:cfg.size];
 if (cfg.mono) {
         // # font = [NSFont fontWithName:@"Roboto Mono" size:cfg.size];
         font = [NSFont fontWithName:@"Menlo" size:cfg.size-5];
 }
if (cfg.bold) {
        font = [[NSFontManager sharedFontManager] convertFont:font toHaveTrait:NSBoldFontMask];
}


	NSDictionary* attr = @{
NSForegroundColorAttributeName: nscolor(cfg.color),
//NSParagraphStyleAttributeName: paragraphStyle,
NSFontAttributeName: font,
};
	[nsstring(s) drawAtPoint:NSMakePoint(x,y-15) withAttributes:attr];
}

int darwin_text_width(string s) {
	// println('text_width "$s" len=$s.len')
	NSString* n = @"";
	if (s.len == 1) {
	        // println('len=1')
	       n=[NSString stringWithFormat:@"%c" , s.str[0]];
	}
	else {
		n = nsstring(s);
	}
	/*
	# if (!defaultFont){
	# defaultFont = [NSFont userFontOfSize: ui__DEFAULT_FONT_SIZE];
	# }
	# NSDictionary *attrs = @{
	# NSFontAttributeName: defaultFont,
	# };
	*/
	NSSize size = [n sizeWithAttributes:nil];
	// # printf("!!!%f\n", ceil(size.width));
	return (int)(ceil(size.width));
}


void darwin_draw_rect(float x, float y, float width, float height, gx__Color c) {
	NSColor* color = nscolor(c);
	NSRect rect = NSMakeRect(x, y, width, height);
	[color setFill];
	NSRectFill(rect);
}


void darwin_window_refresh() {
	//[g_view setNeedsDisplay:YES];
	  // update UI on the main thread TODO separate fn

		dispatch_async(dispatch_get_main_queue(), ^{
			[g_view setNeedsDisplay:YES];
        });

	//puts("refresh");
	//[g_view drawRect:NSMakeRect(0,0,2000,2000)];
	//[[NSGraphicsContext currentContext] flushGraphics];
}

gg__Image darwin_create_image(string path_) {
	 // file = file.trim_space()
	NSString* path = nsstring(path_);
	 NSImage* img = [[NSImage alloc] initWithContentsOfFile:path];
	if (img == 0) {
	}
	 NSSize size = [img size];
	gg__Image res;
	 res.width =  size.width;
	 res.height =  size.height;
	res.path = path_;
	res.ok = true;
	//printf("inited img width=%d\n", res.width) ;
	// need __brige_retained so that the pointer is not freed by ARC
	 res.data = (__bridge_retained voidptr)(img);
	return res;
}

void darwin_draw_image(float x, float y, float w, float h, gg__Image* img) {
	NSImage* i= (__bridge NSImage*)(img->data);
	[i drawInRect:NSMakeRect(x,y,w,h)];
}

void darwin_draw_circle(float x, float y, float d,  gx__Color color) {
	NSColor*        c = nscolor(color);
	NSRect        rect = NSMakeRect(x, y, d * 2, d * 2);
	NSBezierPath* circlePath = [NSBezierPath bezierPath];
	[circlePath appendBezierPathWithOvalInRect: rect];
	[c setFill];
	// [circlePath stroke];
	[circlePath fill];
	// NSRectFill(rect);
}