1 /*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 *
4 * Copyright 2014 Olaf Wintermann. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #import <stdio.h>
30 #import <stdlib.h>
31 #import <string.h>
32
33 #import "graphics.h"
34 #import "container.h"
35 #import "../common/context.h"
36
37
38
39 @implementation UiCanvas
40
41 - (UiObject*) object {
42 return object;
43 }
44
45 - (void) setObject:(void*)obj {
46 object = obj;
47 }
48
49 - (void*) userdata {
50 return userdata;
51 }
52
53 - (void) setUserdata:(void*)d {
54 userdata = d;
55 }
56
57 - (ui_drawfunc) callback {
58 return callback;
59 }
60 - (void) setCallback: (ui_drawfunc)f {
61 callback = f;
62 }
63
64 - (void) drawRect:(NSRect)rect {
65 UiGraphics g;
66 NSRect bounds = [self bounds];
67 g.width = bounds.size.width;
68 g.height = bounds.size.height;
69
70 UiEvent ev;
71 ev.obj = object;
72 ev.window = object->window;
73 ev.document = object->ctx->document;
74
75 callback(&ev, &g, userdata);
76 }
77
78 @end
79
80
81 UIWIDGET ui_drawingarea(UiObject *obj, ui_drawfunc f, void *userdata) {
82 UiContainer *ct = uic_get_current_container(obj);
83
84 NSRect frame = ct->getframe(ct);
85
86 UiCanvas *canvas = [[UiCanvas alloc]initWithFrame:frame];
87 [canvas setObject: obj];
88 [canvas setCallback: f];
89 [canvas setUserdata: userdata];
90 ct->add(ct, canvas);
91
92 return canvas;
93 }
94
95
96 // drawing functions
97 void ui_graphics_color(UiGraphics *gr, int red, int green, int blue) {
98 float r = ((float)red) / 255.f;
99 float g = ((float)green) / 255.f;
100 float b = ((float)blue) / 255.f;
101
102 NSColor *color = [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1];
103 [color set];
104 }
105
106 void ui_draw_rect(UiGraphics *g, int x, int y, int w, int h, int fill) {
107 // translate y
108 y = g->height - y - h;
109
110 NSRect bounds;
111 bounds.origin.x = x;
112 bounds.origin.y = y;
113 bounds.size.width = w;
114 bounds.size.height = h;
115
116 if(fill) {
117 NSRectFill(bounds);
118 } else {
119 NSFrameRect(bounds);
120 }
121 }
122
123
124
125