Mercurial > projects > dwt-linux
annotate dwt/graphics/GC.d @ 256:8d1948844918
Allow null strings and arrays
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Fri, 20 Jun 2008 15:03:54 +0200 |
parents | 5a30aa9820f3 |
children | c0d810de7093 |
rev | line source |
---|---|
72 | 1 /******************************************************************************* |
18 | 2 * Copyright (c) 2000, 2007 IBM Corporation and others. |
3 * All rights reserved. This program and the accompanying materials | |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
72 | 10 * Port to the D programming language: |
11 * Frank Benoit <benoit@tionex.de> | |
18 | 12 *******************************************************************************/ |
13 module dwt.graphics.GC; | |
14 | |
15 import dwt.graphics.Image; | |
16 | |
19 | 17 |
71 | 18 import dwt.DWT; |
19 import dwt.DWTException; | |
20 import dwt.DWTError; | |
21 | 21 import dwt.graphics.Color; |
19 | 22 import dwt.graphics.Drawable; |
23 import dwt.graphics.Resource; | |
24 import dwt.graphics.Device; | |
25 import dwt.graphics.Font; | |
26 import dwt.graphics.FontMetrics; | |
27 import dwt.graphics.GCData; | |
28 import dwt.graphics.Image; | |
29 import dwt.graphics.ImageData; | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
30 import dwt.graphics.Path; |
19 | 31 import dwt.graphics.Pattern; |
32 import dwt.graphics.Point; | |
33 import dwt.graphics.RGB; | |
34 import dwt.graphics.Rectangle; | |
35 import dwt.graphics.Region; | |
36 import dwt.graphics.Resource; | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
37 import dwt.graphics.Transform; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
38 import dwt.graphics.LineAttributes; |
21 | 39 |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
40 import dwt.internal.gtk.OS; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
41 import dwt.internal.cairo.Cairo; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
42 import dwt.internal.Converter; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
43 import dwt.internal.Compatibility; |
200
08789b28bdf3
import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents:
199
diff
changeset
|
44 import dwt.dwthelper.utils; |
21 | 45 |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
46 import tango.text.convert.Format; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
47 import tango.stdc.string; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
48 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
49 |
18 | 50 /** |
51 * Class <code>GC</code> is where all of the drawing capabilities that are | |
71 | 52 * supported by DWT are located. Instances are used to draw on either an |
18 | 53 * <code>Image</code>, a <code>Control</code>, or directly on a <code>Display</code>. |
54 * <dl> | |
55 * <dt><b>Styles:</b></dt> | |
56 * <dd>LEFT_TO_RIGHT, RIGHT_TO_LEFT</dd> | |
57 * </dl> | |
58 * | |
59 * <p> | |
71 | 60 * The DWT drawing coordinate system is the two-dimensional space with the origin |
18 | 61 * (0,0) at the top left corner of the drawing area and with (x,y) values increasing |
62 * to the right and downward respectively. | |
63 * </p> | |
64 * | |
65 * <p> | |
66 * Application code must explicitly invoke the <code>GC.dispose()</code> | |
67 * method to release the operating system resources managed by each instance | |
68 * when those instances are no longer required. This is <em>particularly</em> | |
69 * important on Windows95 and Windows98 where the operating system has a limited | |
70 * number of device contexts available. | |
71 * </p> | |
72 * | |
73 * <p> | |
74 * Note: Only one of LEFT_TO_RIGHT and RIGHT_TO_LEFT may be specified. | |
75 * </p> | |
76 * | |
77 * @see dwt.events.PaintEvent | |
78 */ | |
19 | 79 public final class GC : Resource { |
240 | 80 |
81 alias Resource.init_ init_; | |
82 | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
83 /** |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
84 * the handle to the OS device context |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
85 * (Warning: This field is platform dependent) |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
86 * <p> |
71 | 87 * <b>IMPORTANT:</b> This field is <em>not</em> part of the DWT |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
88 * public API. It is marked public only so that it can be shared |
71 | 89 * within the packages provided by DWT. It is not available on all |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
90 * platforms and should never be accessed from application code. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
91 * </p> |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
92 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
93 public GdkGC* handle; |
18 | 94 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
95 Drawable drawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
96 GCData data; |
18 | 97 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
98 const static int FOREGROUND = 1 << 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
99 const static int BACKGROUND = 1 << 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
100 const static int FONT = 1 << 2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
101 const static int LINE_STYLE = 1 << 3; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
102 const static int LINE_CAP = 1 << 4; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
103 const static int LINE_JOIN = 1 << 5; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
104 const static int LINE_WIDTH = 1 << 6; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
105 const static int LINE_MITERLIMIT = 1 << 7; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
106 const static int BACKGROUND_BG = 1 << 8; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
107 const static int DRAW_OFFSET = 1 << 9; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
108 const static int DRAW = FOREGROUND | LINE_WIDTH | LINE_STYLE | LINE_CAP | LINE_JOIN | LINE_MITERLIMIT | DRAW_OFFSET; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
109 const static int FILL = BACKGROUND; |
18 | 110 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
111 static const float[] LINE_DOT = [1, 1]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
112 static const float[] LINE_DASH = [3, 1]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
113 static const float[] LINE_DASHDOT = [3, 1, 1, 1]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
114 static const float[] LINE_DASHDOTDOT = [3, 1, 1, 1, 1, 1]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
115 static const float[] LINE_DOT_ZERO = [3, 3]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
116 static const float[] LINE_DASH_ZERO = [18, 6]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
117 static const float[] LINE_DASHDOT_ZERO = [9, 6, 3, 6]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
118 static const float[] LINE_DASHDOTDOT_ZERO = [9, 3, 3, 3, 3, 3]; |
18 | 119 |
19 | 120 this() { |
18 | 121 } |
122 | |
123 /** | |
124 * Constructs a new instance of this class which has been | |
125 * configured to draw on the specified drawable. Sets the | |
126 * foreground color, background color and font in the GC | |
127 * to match those in the drawable. | |
128 * <p> | |
129 * You must dispose the graphics context when it is no longer required. | |
130 * </p> | |
131 * @param drawable the drawable to draw on | |
132 * @exception IllegalArgumentException <ul> | |
133 * <li>ERROR_NULL_ARGUMENT - if the drawable is null</li> | |
134 * <li>ERROR_NULL_ARGUMENT - if there is no current device</li> | |
135 * <li>ERROR_INVALID_ARGUMENT | |
136 * - if the drawable is an image that is not a bitmap or an icon | |
137 * - if the drawable is an image or printer that is already selected | |
138 * into another graphics context</li> | |
139 * </ul> | |
71 | 140 * @exception DWTError <ul> |
18 | 141 * <li>ERROR_NO_HANDLES if a handle could not be obtained for GC creation</li> |
142 * <li>ERROR_THREAD_INVALID_ACCESS if not called from the thread that created the drawable</li> | |
143 * </ul> | |
144 */ | |
19 | 145 public this(Drawable drawable) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
146 this(drawable, 0); |
18 | 147 } |
148 | |
149 /** | |
150 * Constructs a new instance of this class which has been | |
151 * configured to draw on the specified drawable. Sets the | |
152 * foreground color, background color and font in the GC | |
153 * to match those in the drawable. | |
154 * <p> | |
155 * You must dispose the graphics context when it is no longer required. | |
156 * </p> | |
157 * | |
158 * @param drawable the drawable to draw on | |
159 * @param style the style of GC to construct | |
160 * | |
161 * @exception IllegalArgumentException <ul> | |
162 * <li>ERROR_NULL_ARGUMENT - if the drawable is null</li> | |
163 * <li>ERROR_NULL_ARGUMENT - if there is no current device</li> | |
164 * <li>ERROR_INVALID_ARGUMENT | |
165 * - if the drawable is an image that is not a bitmap or an icon | |
166 * - if the drawable is an image or printer that is already selected | |
167 * into another graphics context</li> | |
168 * </ul> | |
71 | 169 * @exception DWTError <ul> |
18 | 170 * <li>ERROR_NO_HANDLES if a handle could not be obtained for GC creation</li> |
171 * <li>ERROR_THREAD_INVALID_ACCESS if not called from the thread that created the drawable</li> | |
172 * </ul> | |
173 * | |
174 * @since 2.1.2 | |
175 */ | |
19 | 176 public this(Drawable drawable, int style) { |
71 | 177 if (drawable is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
178 GCData data = new GCData(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
179 data.style = checkStyle(style); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
180 auto gdkGC = drawable.internal_new_GC(data); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
181 Device device = data.device; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
182 if (device is null) device = Device.getDevice(); |
71 | 183 if (device is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
184 this.device = data.device = device; |
240 | 185 init_(drawable, data, gdkGC); |
186 init_(); | |
18 | 187 } |
188 | |
238 | 189 static void addCairoString(cairo_t* cairo, String str, float x, float y, Font font) { |
199
a5adab24940b
Fix missing string termination, thx nascent for example code.
Frank Benoit <benoit@tionex.de>
parents:
194
diff
changeset
|
190 char* buffer = toStringz( str ); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
191 if (OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
192 auto layout = OS.pango_cairo_create_layout(cairo); |
71 | 193 if (layout is null) DWT.error(DWT.ERROR_NO_HANDLES); |
199
a5adab24940b
Fix missing string termination, thx nascent for example code.
Frank Benoit <benoit@tionex.de>
parents:
194
diff
changeset
|
194 OS.pango_layout_set_text(layout, buffer, -1); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
195 OS.pango_layout_set_font_description(layout, font.handle); |
240 | 196 double currentX, currentY; |
197 Cairo.cairo_get_current_point(cairo, ¤tX, ¤tY); | |
198 if (currentX !is x || currentY !is y) { | |
199 Cairo.cairo_move_to(cairo, x, y); | |
200 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
201 OS.pango_cairo_layout_path(cairo, layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
202 OS.g_object_unref(layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
203 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
204 GC.setCairoFont(cairo, font); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
205 cairo_font_extents_t* extents = new cairo_font_extents_t(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
206 Cairo.cairo_font_extents(cairo, extents); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
207 double baseline = y + extents.ascent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
208 Cairo.cairo_move_to(cairo, x, baseline); |
199
a5adab24940b
Fix missing string termination, thx nascent for example code.
Frank Benoit <benoit@tionex.de>
parents:
194
diff
changeset
|
209 Cairo.cairo_text_path(cairo, buffer); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
210 } |
18 | 211 } |
212 | |
213 static int checkStyle (int style) { | |
71 | 214 if ((style & DWT.LEFT_TO_RIGHT) !is 0) style &= ~DWT.RIGHT_TO_LEFT; |
215 return style & (DWT.LEFT_TO_RIGHT | DWT.RIGHT_TO_LEFT); | |
18 | 216 } |
217 | |
240 | 218 public static GC gtk_new(GdkGC* handle, GCData data) { |
219 GC gc = new GC(); | |
220 gc.device = data.device; | |
221 gc.init_(null, data, handle); | |
222 return gc; | |
223 } | |
224 | |
18 | 225 public static GC gtk_new(Drawable drawable, GCData data) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
226 GC gc = new GC(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
227 auto gdkGC = drawable.internal_new_GC(data); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
228 gc.device = data.device; |
240 | 229 gc.init_(drawable, data, gdkGC); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
230 return gc; |
18 | 231 } |
232 | |
233 void checkGC (int mask) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
234 int state = data.state; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
235 if ((state & mask) is mask) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
236 state = (state ^ mask) & mask; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
237 data.state |= mask; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
238 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
239 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
240 if ((state & (BACKGROUND | FOREGROUND)) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
241 GdkColor* color; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
242 Pattern pattern; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
243 if ((state & FOREGROUND) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
244 color = data.foreground; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
245 pattern = data.foregroundPattern; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
246 data.state &= ~BACKGROUND; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
247 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
248 color = data.background; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
249 pattern = data.backgroundPattern; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
250 data.state &= ~FOREGROUND; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
251 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
252 if (pattern !is null) { |
240 | 253 if ((data.style & DWT.MIRRORED) !is 0 && pattern.surface !is null) { |
254 auto newPattern = Cairo.cairo_pattern_create_for_surface(pattern.surface); | |
255 if (newPattern is null) DWT.error(DWT.ERROR_NO_HANDLES); | |
256 Cairo.cairo_pattern_set_extend(newPattern, Cairo.CAIRO_EXTEND_REPEAT); | |
257 double[6] matrix; matrix[0] = -1; matrix[1] = 0; matrix[2] = 0; matrix[3] = 1; matrix[4] = 0; matrix[5] = 0; | |
258 Cairo.cairo_pattern_set_matrix(newPattern, cast(cairo_matrix_t*) matrix.ptr); | |
259 Cairo.cairo_set_source(cairo, newPattern); | |
260 Cairo.cairo_pattern_destroy(newPattern); | |
261 } else { | |
262 Cairo.cairo_set_source(cairo, pattern.handle); | |
263 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
264 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
265 Cairo.cairo_set_source_rgba(cairo, (color.red & 0xFFFF) / cast(float)0xFFFF, (color.green & 0xFFFF) / cast(float)0xFFFF, (color.blue & 0xFFFF) / cast(float)0xFFFF, data.alpha / cast(float)0xFF); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
266 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
267 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
268 if ((state & FONT) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
269 if (data.layout !is null) { |
240 | 270 Font font = data.font; |
271 OS.pango_layout_set_font_description(data.layout, font.handle); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
272 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
273 if (OS.GTK_VERSION < OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
274 setCairoFont(cairo, data.font); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
275 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
276 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
277 if ((state & LINE_CAP) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
278 int cap_style = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
279 switch (data.lineCap) { |
71 | 280 case DWT.CAP_ROUND: cap_style = Cairo.CAIRO_LINE_CAP_ROUND; break; |
281 case DWT.CAP_FLAT: cap_style = Cairo.CAIRO_LINE_CAP_BUTT; break; | |
282 case DWT.CAP_SQUARE: cap_style = Cairo.CAIRO_LINE_CAP_SQUARE; break; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
283 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
284 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
285 Cairo.cairo_set_line_cap(cairo, cap_style); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
286 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
287 if ((state & LINE_JOIN) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
288 int join_style = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
289 switch (data.lineJoin) { |
71 | 290 case DWT.JOIN_MITER: join_style = Cairo.CAIRO_LINE_JOIN_MITER; break; |
291 case DWT.JOIN_ROUND: join_style = Cairo.CAIRO_LINE_JOIN_ROUND; break; | |
292 case DWT.JOIN_BEVEL: join_style = Cairo.CAIRO_LINE_JOIN_BEVEL; break; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
293 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
294 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
295 Cairo.cairo_set_line_join(cairo, join_style); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
296 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
297 if ((state & LINE_WIDTH) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
298 Cairo.cairo_set_line_width(cairo, data.lineWidth is 0 ? 1 : data.lineWidth); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
299 switch (data.lineStyle) { |
71 | 300 case DWT.LINE_DOT: |
301 case DWT.LINE_DASH: | |
302 case DWT.LINE_DASHDOT: | |
303 case DWT.LINE_DASHDOTDOT: | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
304 state |= LINE_STYLE; |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
305 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
306 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
307 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
308 if ((state & LINE_STYLE) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
309 float dashesOffset = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
310 float[] dashes = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
311 float width = data.lineWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
312 switch (data.lineStyle) { |
71 | 313 case DWT.LINE_SOLID: break; |
314 case DWT.LINE_DASH: dashes = width !is 0 ? LINE_DASH : LINE_DASH_ZERO; break; | |
315 case DWT.LINE_DOT: dashes = width !is 0 ? LINE_DOT : LINE_DOT_ZERO; break; | |
316 case DWT.LINE_DASHDOT: dashes = width !is 0 ? LINE_DASHDOT : LINE_DASHDOT_ZERO; break; | |
317 case DWT.LINE_DASHDOTDOT: dashes = width !is 0 ? LINE_DASHDOTDOT : LINE_DASHDOTDOT_ZERO; break; | |
318 case DWT.LINE_CUSTOM: dashes = data.lineDashes; break; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
319 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
320 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
321 if (dashes !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
322 dashesOffset = data.lineDashesOffset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
323 double[] cairoDashes = new double[dashes.length]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
324 for (int i = 0; i < cairoDashes.length; i++) { |
71 | 325 cairoDashes[i] = width is 0 || data.lineStyle is DWT.LINE_CUSTOM ? dashes[i] : dashes[i] * width; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
326 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
327 Cairo.cairo_set_dash(cairo, cairoDashes.ptr, cairoDashes.length, dashesOffset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
328 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
329 Cairo.cairo_set_dash(cairo, null, 0, 0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
330 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
331 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
332 if ((state & LINE_MITERLIMIT) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
333 Cairo.cairo_set_miter_limit(cairo, data.lineMiterLimit); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
334 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
335 if ((state & DRAW_OFFSET) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
336 data.cairoXoffset = data.cairoYoffset = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
337 double[] matrix = new double[6]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
338 Cairo.cairo_get_matrix(cairo,cast(cairo_matrix_t*) matrix.ptr); |
240 | 339 double dx = 1; |
340 double dy = 1; | |
341 Cairo.cairo_user_to_device_distance(cairo, &dx, &dy); | |
342 double scaling = dx; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
343 if (scaling < 0) scaling = -scaling; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
344 double strokeWidth = data.lineWidth * scaling; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
345 if (strokeWidth is 0 || (cast(int)strokeWidth % 2) is 1) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
346 data.cairoXoffset = 0.5 / scaling; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
347 } |
240 | 348 scaling = dy; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
349 if (scaling < 0) scaling = -scaling; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
350 strokeWidth = data.lineWidth * scaling; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
351 if (strokeWidth is 0 || (cast(int)strokeWidth % 2) is 1) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
352 data.cairoYoffset = 0.5 / scaling; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
353 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
354 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
355 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
356 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
357 if ((state & (BACKGROUND | FOREGROUND)) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
358 GdkColor* foreground; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
359 if ((state & FOREGROUND) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
360 foreground = data.foreground; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
361 data.state &= ~BACKGROUND; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
362 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
363 foreground = data.background; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
364 data.state &= ~FOREGROUND; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
365 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
366 OS.gdk_gc_set_foreground(handle, foreground); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
367 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
368 if ((state & BACKGROUND_BG) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
369 GdkColor* background = data.background; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
370 OS.gdk_gc_set_background(handle, background); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
371 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
372 if ((state & FONT) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
373 if (data.layout !is null) { |
240 | 374 Font font = data.font; |
375 OS.pango_layout_set_font_description(data.layout, font.handle); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
376 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
377 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
378 if ((state & (LINE_CAP | LINE_JOIN | LINE_STYLE | LINE_WIDTH)) !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
379 int cap_style = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
380 int join_style = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
381 int width = cast(int)data.lineWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
382 int line_style = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
383 float[] dashes = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
384 switch (data.lineCap) { |
71 | 385 case DWT.CAP_ROUND: cap_style = OS.GDK_CAP_ROUND; break; |
386 case DWT.CAP_FLAT: cap_style = OS.GDK_CAP_BUTT; break; | |
387 case DWT.CAP_SQUARE: cap_style = OS.GDK_CAP_PROJECTING; break; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
388 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
389 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
390 switch (data.lineJoin) { |
71 | 391 case DWT.JOIN_ROUND: join_style = OS.GDK_JOIN_ROUND; break; |
392 case DWT.JOIN_MITER: join_style = OS.GDK_JOIN_MITER; break; | |
393 case DWT.JOIN_BEVEL: join_style = OS.GDK_JOIN_BEVEL; break; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
394 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
395 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
396 switch (data.lineStyle) { |
71 | 397 case DWT.LINE_SOLID: break; |
398 case DWT.LINE_DASH: dashes = width !is 0 ? LINE_DASH : LINE_DASH_ZERO; break; | |
399 case DWT.LINE_DOT: dashes = width !is 0 ? LINE_DOT : LINE_DOT_ZERO; break; | |
400 case DWT.LINE_DASHDOT: dashes = width !is 0 ? LINE_DASHDOT : LINE_DASHDOT_ZERO; break; | |
401 case DWT.LINE_DASHDOTDOT: dashes = width !is 0 ? LINE_DASHDOTDOT : LINE_DASHDOTDOT_ZERO; break; | |
402 case DWT.LINE_CUSTOM: dashes = data.lineDashes; break; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
403 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
404 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
405 if (dashes !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
406 if ((state & LINE_STYLE) !is 0) { |
238 | 407 String dash_list = new char[dashes.length]; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
408 for (int i = 0; i < dash_list.length; i++) { |
71 | 409 dash_list[i] = cast(char)(width is 0 || data.lineStyle is DWT.LINE_CUSTOM ? dashes[i] : dashes[i] * width); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
410 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
411 OS.gdk_gc_set_dashes(handle, 0, dash_list.ptr, dash_list.length); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
412 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
413 line_style = OS.GDK_LINE_ON_OFF_DASH; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
414 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
415 line_style = OS.GDK_LINE_SOLID; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
416 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
417 OS.gdk_gc_set_line_attributes(handle, width, line_style, cap_style, join_style); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
418 } |
18 | 419 } |
420 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
421 GdkRegion* convertRgn(GdkRegion* rgn, double[] matrix) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
422 auto newRgn = OS.gdk_region_new(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
423 int nRects; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
424 GdkRectangle* rects; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
425 OS.gdk_region_get_rectangles(rgn, &rects, &nRects); |
202 | 426 GdkRectangle* rect; |
427 int[8] pointArray; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
428 double x, y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
429 for (int i=0; i<nRects; i++) { |
202 | 430 rect = rects +i; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
431 x = rect.x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
432 y = rect.y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
433 Cairo.cairo_matrix_transform_point(cast(cairo_matrix_t*)matrix.ptr, &x, &y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
434 pointArray[0] = cast(int)x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
435 pointArray[1] = cast(int)y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
436 x = rect.x + rect.width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
437 y = rect.y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
438 Cairo.cairo_matrix_transform_point(cast(cairo_matrix_t*)matrix.ptr, &x, &y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
439 pointArray[2] = cast(int)Math.round(x); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
440 pointArray[3] = cast(int)y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
441 x = rect.x + rect.width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
442 y = rect.y + rect.height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
443 Cairo.cairo_matrix_transform_point(cast(cairo_matrix_t*)matrix.ptr, &x, &y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
444 pointArray[4] = cast(int)Math.round(x); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
445 pointArray[5] = cast(int)Math.round(y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
446 x = rect.x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
447 y = rect.y + rect.height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
448 Cairo.cairo_matrix_transform_point(cast(cairo_matrix_t*)matrix.ptr, &x, &y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
449 pointArray[6] = cast(int)x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
450 pointArray[7] = cast(int)Math.round(y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
451 auto polyRgn = OS.gdk_region_polygon(cast(GdkPoint*)pointArray.ptr, pointArray.length / 2, OS.GDK_EVEN_ODD_RULE); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
452 OS.gdk_region_union(newRgn, polyRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
453 OS.gdk_region_destroy(polyRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
454 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
455 if (rects !is null) OS.g_free(rects); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
456 return newRgn; |
18 | 457 } |
458 | |
459 /** | |
460 * Copies a rectangular area of the receiver at the specified | |
71 | 461 * position into the image, which must be of type <code>DWT.BITMAP</code>. |
18 | 462 * |
463 * @param image the image to copy into | |
464 * @param x the x coordinate in the receiver of the area to be copied | |
465 * @param y the y coordinate in the receiver of the area to be copied | |
466 * | |
467 * @exception IllegalArgumentException <ul> | |
468 * <li>ERROR_NULL_ARGUMENT - if the image is null</li> | |
469 * <li>ERROR_INVALID_ARGUMENT - if the image is not a bitmap or has been disposed</li> | |
470 * </ul> | |
71 | 471 * @exception DWTException <ul> |
18 | 472 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
473 * </ul> | |
474 */ | |
475 public void copyArea(Image image, int x, int y) { | |
71 | 476 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
477 if (image is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
478 if (image.type !is DWT.BITMAP || image.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
479 Rectangle rect = image.getBounds(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
480 auto gdkGC = OS.gdk_gc_new(image.pixmap); |
71 | 481 if (gdkGC is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
482 OS.gdk_gc_set_subwindow(gdkGC, OS.GDK_INCLUDE_INFERIORS); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
483 OS.gdk_draw_drawable(image.pixmap, gdkGC, data.drawable, x, y, 0, 0, rect.width, rect.height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
484 OS.g_object_unref(gdkGC); |
18 | 485 } |
486 | |
487 /** | |
488 * Copies a rectangular area of the receiver at the source | |
489 * position onto the receiver at the destination position. | |
490 * | |
491 * @param srcX the x coordinate in the receiver of the area to be copied | |
492 * @param srcY the y coordinate in the receiver of the area to be copied | |
493 * @param width the width of the area to copy | |
494 * @param height the height of the area to copy | |
495 * @param destX the x coordinate in the receiver of the area to copy to | |
496 * @param destY the y coordinate in the receiver of the area to copy to | |
497 * | |
71 | 498 * @exception DWTException <ul> |
18 | 499 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
500 * </ul> | |
501 */ | |
502 public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
503 copyArea(srcX, srcY, width, height, destX, destY, true); |
18 | 504 } |
505 /** | |
506 * Copies a rectangular area of the receiver at the source | |
507 * position onto the receiver at the destination position. | |
508 * | |
509 * @param srcX the x coordinate in the receiver of the area to be copied | |
510 * @param srcY the y coordinate in the receiver of the area to be copied | |
511 * @param width the width of the area to copy | |
512 * @param height the height of the area to copy | |
513 * @param destX the x coordinate in the receiver of the area to copy to | |
514 * @param destY the y coordinate in the receiver of the area to copy to | |
515 * @param paint if <code>true</code> paint events will be generated for old and obscured areas | |
516 * | |
71 | 517 * @exception DWTException <ul> |
18 | 518 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
519 * </ul> | |
520 * | |
521 * @since 3.1 | |
522 */ | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
523 public void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, bool paint) { |
71 | 524 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
525 if (width <= 0 || height <= 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
526 int deltaX = destX - srcX, deltaY = destY - srcY; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
527 if (deltaX is 0 && deltaY is 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
528 auto drawable = data.drawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
529 if (data.image is null && paint) OS.gdk_gc_set_exposures(handle, true); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
530 OS.gdk_draw_drawable(drawable, handle, drawable, srcX, srcY, destX, destY, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
531 if (data.image is null & paint) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
532 OS.gdk_gc_set_exposures(handle, false); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
533 bool disjoint = (destX + width < srcX) || (srcX + width < destX) || (destY + height < srcY) || (srcY + height < destY); |
202 | 534 GdkRectangle rect; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
535 if (disjoint) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
536 rect.x = srcX; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
537 rect.y = srcY; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
538 rect.width = width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
539 rect.height = height; |
202 | 540 OS.gdk_window_invalidate_rect (cast(GdkWindow*)drawable, &rect, false); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
541 // OS.gdk_window_clear_area_e(drawable, srcX, srcY, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
542 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
543 if (deltaX !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
544 int newX = destX - deltaX; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
545 if (deltaX < 0) newX = destX + width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
546 rect.x = newX; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
547 rect.y = srcY; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
548 rect.width = Math.abs(deltaX); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
549 rect.height = height; |
202 | 550 OS.gdk_window_invalidate_rect (cast(GdkWindow*)drawable, &rect, false); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
551 // OS.gdk_window_clear_area_e(drawable, newX, srcY, Math.abs(deltaX), height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
552 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
553 if (deltaY !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
554 int newY = destY - deltaY; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
555 if (deltaY < 0) newY = destY + height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
556 rect.x = srcX; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
557 rect.y = newY; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
558 rect.width = width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
559 rect.height = Math.abs(deltaY); |
202 | 560 OS.gdk_window_invalidate_rect (cast(GdkWindow*)drawable, &rect, false); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
561 // OS.gdk_window_clear_area_e(drawable, srcX, newY, width, Math.abs(deltaY)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
562 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
563 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
564 } |
18 | 565 } |
566 | |
567 void createLayout() { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
568 auto context = OS.gdk_pango_context_get(); |
71 | 569 if (context is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
570 data.context = context; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
571 auto layout = OS.pango_layout_new(context); |
71 | 572 if (layout is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
573 data.layout = layout; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
574 OS.pango_context_set_language(context, OS.gtk_get_default_language()); |
240 | 575 OS.pango_context_set_base_dir(context, (data.style & DWT.MIRRORED) !is 0 ? OS.PANGO_DIRECTION_RTL : OS.PANGO_DIRECTION_LTR); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
576 OS.gdk_pango_context_set_colormap(context, OS.gdk_colormap_get_system()); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
577 if (OS.GTK_VERSION >= OS.buildVERSION(2, 4, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
578 OS.pango_layout_set_auto_dir(layout, false); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
579 } |
18 | 580 } |
581 | |
582 void disposeLayout() { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
583 data.str = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
584 if (data.context !is null) OS.g_object_unref(data.context); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
585 if (data.layout !is null) OS.g_object_unref(data.layout); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
586 data.layout = null; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
587 data.context = null; |
18 | 588 } |
589 | |
240 | 590 void destroy() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
591 if (data.disposeCairo) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
592 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
593 if (cairo !is null) Cairo.cairo_destroy(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
594 data.cairo = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
595 } |
18 | 596 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
597 /* Free resources */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
598 auto clipRgn = data.clipRgn; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
599 if (clipRgn !is null) OS.gdk_region_destroy(clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
600 Image image = data.image; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
601 if (image !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
602 image.memGC = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
603 if (image.transparentPixel !is -1) image.createMask(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
604 } |
18 | 605 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
606 disposeLayout(); |
18 | 607 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
608 /* Dispose the GC */ |
240 | 609 if (drawable !is null) { |
610 drawable.internal_dispose_GC(handle, data); | |
611 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
612 data.drawable = null; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
613 data.clipRgn = null; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
614 drawable = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
615 handle = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
616 data.image = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
617 data.str = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
618 data = null; |
18 | 619 } |
620 | |
621 /** | |
622 * Draws the outline of a circular or elliptical arc | |
623 * within the specified rectangular area. | |
624 * <p> | |
625 * The resulting arc begins at <code>startAngle</code> and extends | |
626 * for <code>arcAngle</code> degrees, using the current color. | |
627 * Angles are interpreted such that 0 degrees is at the 3 o'clock | |
628 * position. A positive value indicates a counter-clockwise rotation | |
629 * while a negative value indicates a clockwise rotation. | |
630 * </p><p> | |
631 * The center of the arc is the center of the rectangle whose origin | |
632 * is (<code>x</code>, <code>y</code>) and whose size is specified by the | |
633 * <code>width</code> and <code>height</code> arguments. | |
634 * </p><p> | |
635 * The resulting arc covers an area <code>width + 1</code> pixels wide | |
636 * by <code>height + 1</code> pixels tall. | |
637 * </p> | |
638 * | |
639 * @param x the x coordinate of the upper-left corner of the arc to be drawn | |
640 * @param y the y coordinate of the upper-left corner of the arc to be drawn | |
641 * @param width the width of the arc to be drawn | |
642 * @param height the height of the arc to be drawn | |
643 * @param startAngle the beginning angle | |
644 * @param arcAngle the angular extent of the arc, relative to the start angle | |
645 * | |
71 | 646 * @exception DWTException <ul> |
18 | 647 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
648 * </ul> | |
649 */ | |
650 public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) { | |
71 | 651 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
652 checkGC(DRAW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
653 if (width < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
654 x = x + width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
655 width = -width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
656 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
657 if (height < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
658 y = y + height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
659 height = -height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
660 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
661 if (width is 0 || height is 0 || arcAngle is 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
662 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
663 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
664 double xOffset = data.cairoXoffset, yOffset = data.cairoYoffset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
665 if (width is height) { |
18 | 666 if (arcAngle >= 0) { |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
667 Cairo.cairo_arc_negative(cairo, x + xOffset + width / 2f, y + yOffset + height / 2f, width / 2f, -startAngle * cast(float)Compatibility.PI / 180, -(startAngle + arcAngle) * cast(float)Compatibility.PI / 180); |
18 | 668 } else { |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
669 Cairo.cairo_arc(cairo, x + xOffset + width / 2f, y + yOffset + height / 2f, width / 2f, -startAngle * cast(float)Compatibility.PI / 180, -(startAngle + arcAngle) * cast(float)Compatibility.PI / 180); |
18 | 670 } |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
671 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
672 Cairo.cairo_save(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
673 Cairo.cairo_translate(cairo, x + xOffset + width / 2f, y + yOffset + height / 2f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
674 Cairo.cairo_scale(cairo, width / 2f, height / 2f); |
18 | 675 if (arcAngle >= 0) { |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
676 Cairo.cairo_arc_negative(cairo, 0, 0, 1, -startAngle * cast(float)Compatibility.PI / 180, -(startAngle + arcAngle) * cast(float)Compatibility.PI / 180); |
18 | 677 } else { |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
678 Cairo.cairo_arc(cairo, 0, 0, 1, -startAngle * cast(float)Compatibility.PI / 180, -(startAngle + arcAngle) * cast(float)Compatibility.PI / 180); |
18 | 679 } |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
680 Cairo.cairo_restore(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
681 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
682 Cairo.cairo_stroke(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
683 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
684 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
685 OS.gdk_draw_arc(data.drawable, handle, 0, x, y, width, height, startAngle * 64, arcAngle * 64); |
18 | 686 } |
687 | |
688 /** | |
689 * Draws a rectangle, based on the specified arguments, which has | |
690 * the appearance of the platform's <em>focus rectangle</em> if the | |
691 * platform supports such a notion, and otherwise draws a simple | |
692 * rectangle in the receiver's foreground color. | |
693 * | |
694 * @param x the x coordinate of the rectangle | |
695 * @param y the y coordinate of the rectangle | |
696 * @param width the width of the rectangle | |
697 * @param height the height of the rectangle | |
698 * | |
71 | 699 * @exception DWTException <ul> |
18 | 700 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
701 * </ul> | |
702 * | |
703 * @see #drawRectangle(int, int, int, int) | |
704 */ | |
705 public void drawFocus(int x, int y, int width, int height) { | |
71 | 706 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
707 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
708 * Feature in GTK. The function gtk_widget_get_default_style() |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
709 * can't be used here because gtk_paint_focus() uses GCs, which |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
710 * are not valid in the default style. The fix is to use a style |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
711 * from a widget. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
712 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
713 auto style = OS.gtk_widget_get_style(data.device.shellHandle); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
714 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
715 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
716 checkGC(FOREGROUND); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
717 int lineWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
718 OS.gtk_widget_style_get1(data.device.shellHandle, OS.focus_line_width.ptr, &lineWidth ); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
719 Cairo.cairo_save(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
720 Cairo.cairo_set_line_width(cairo, lineWidth); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
721 double[] dashes = [1, 1]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
722 double dash_offset = -lineWidth / 2f; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
723 while (dash_offset < 0) dash_offset += 2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
724 Cairo.cairo_set_dash(cairo, dashes.ptr, dashes.length, dash_offset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
725 Cairo.cairo_rectangle(cairo, x + lineWidth / 2f, y + lineWidth / 2f, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
726 Cairo.cairo_stroke(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
727 Cairo.cairo_restore(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
728 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
729 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
730 char dummy; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
731 OS.gtk_paint_focus(style,cast(GdkWindow *) data.drawable, OS.GTK_STATE_NORMAL, null, data.device.shellHandle, &dummy, x, y, width, height); |
18 | 732 } |
733 | |
734 /** | |
735 * Draws the given image in the receiver at the specified | |
736 * coordinates. | |
737 * | |
738 * @param image the image to draw | |
739 * @param x the x coordinate of where to draw | |
740 * @param y the y coordinate of where to draw | |
741 * | |
742 * @exception IllegalArgumentException <ul> | |
743 * <li>ERROR_NULL_ARGUMENT - if the image is null</li> | |
744 * <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> | |
745 * <li>ERROR_INVALID_ARGUMENT - if the given coordinates are outside the bounds of the image</li> | |
71 | 746 * @exception DWTException <ul> |
18 | 747 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
748 * </ul> | |
71 | 749 * @exception DWTError <ul> |
18 | 750 * <li>ERROR_NO_HANDLES - if no handles are available to perform the operation</li> |
751 * </ul> | |
752 */ | |
753 public void drawImage(Image image, int x, int y) { | |
71 | 754 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
755 if (image is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
756 if (image.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
757 drawImage(image, 0, 0, -1, -1, x, y, -1, -1, true); |
18 | 758 } |
759 | |
760 /** | |
761 * Copies a rectangular area from the source image into a (potentially | |
762 * different sized) rectangular area in the receiver. If the source | |
763 * and destination areas are of differing sizes, then the source | |
764 * area will be stretched or shrunk to fit the destination area | |
765 * as it is copied. The copy fails if any part of the source rectangle | |
766 * lies outside the bounds of the source image, or if any of the width | |
767 * or height arguments are negative. | |
768 * | |
769 * @param image the source image | |
770 * @param srcX the x coordinate in the source image to copy from | |
771 * @param srcY the y coordinate in the source image to copy from | |
772 * @param srcWidth the width in pixels to copy from the source | |
773 * @param srcHeight the height in pixels to copy from the source | |
774 * @param destX the x coordinate in the destination to copy to | |
775 * @param destY the y coordinate in the destination to copy to | |
776 * @param destWidth the width in pixels of the destination rectangle | |
777 * @param destHeight the height in pixels of the destination rectangle | |
778 * | |
779 * @exception IllegalArgumentException <ul> | |
780 * <li>ERROR_NULL_ARGUMENT - if the image is null</li> | |
781 * <li>ERROR_INVALID_ARGUMENT - if the image has been disposed</li> | |
782 * <li>ERROR_INVALID_ARGUMENT - if any of the width or height arguments are negative. | |
783 * <li>ERROR_INVALID_ARGUMENT - if the source rectangle is not contained within the bounds of the source image</li> | |
784 * </ul> | |
71 | 785 * @exception DWTException <ul> |
18 | 786 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
787 * </ul> | |
71 | 788 * @exception DWTError <ul> |
18 | 789 * <li>ERROR_NO_HANDLES - if no handles are available to perform the operation</li> |
790 * </ul> | |
791 */ | |
792 public void drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight) { | |
71 | 793 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
794 if (srcWidth is 0 || srcHeight is 0 || destWidth is 0 || destHeight is 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
795 if (srcX < 0 || srcY < 0 || srcWidth < 0 || srcHeight < 0 || destWidth < 0 || destHeight < 0) { |
71 | 796 DWT.error (DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
797 } |
71 | 798 if (image is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
799 if (image.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
800 drawImage(image, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, false); |
18 | 801 } |
802 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
803 void drawImage(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, bool simple) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
804 int width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
805 int height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
806 OS.gdk_drawable_get_size(srcImage.pixmap, &width, &height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
807 int imgWidth = width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
808 int imgHeight = height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
809 if (simple) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
810 srcWidth = destWidth = imgWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
811 srcHeight = destHeight = imgHeight; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
812 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
813 simple = srcX is 0 && srcY is 0 && |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
814 srcWidth is destWidth && destWidth is imgWidth && |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
815 srcHeight is destHeight && destHeight is imgHeight; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
816 if (srcX + srcWidth > imgWidth || srcY + srcHeight > imgHeight) { |
71 | 817 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
818 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
819 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
820 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
821 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
822 if (data.alpha !is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
823 srcImage.createSurface(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
824 Cairo.cairo_save(cairo); |
240 | 825 if ((data.style & DWT.MIRRORED) !is 0) { |
826 Cairo.cairo_scale(cairo, -1f, 1); | |
827 Cairo.cairo_translate(cairo, - 2 * destX - destWidth, 0); | |
828 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
829 Cairo.cairo_rectangle(cairo, destX , destY, destWidth, destHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
830 Cairo.cairo_clip(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
831 Cairo.cairo_translate(cairo, destX - srcX, destY - srcY); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
832 if (srcWidth !is destWidth || srcHeight !is destHeight) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
833 Cairo.cairo_scale(cairo, destWidth / cast(float)srcWidth, destHeight / cast(float)srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
834 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
835 int filter = Cairo.CAIRO_FILTER_GOOD; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
836 switch (data.interpolation) { |
71 | 837 case DWT.DEFAULT: filter = Cairo.CAIRO_FILTER_GOOD; break; |
838 case DWT.NONE: filter = Cairo.CAIRO_FILTER_NEAREST; break; | |
839 case DWT.LOW: filter = Cairo.CAIRO_FILTER_FAST; break; | |
840 case DWT.HIGH: filter = Cairo.CAIRO_FILTER_BEST; break; | |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
841 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
842 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
843 auto pattern = Cairo.cairo_pattern_create_for_surface(srcImage.surface); |
71 | 844 if (pattern is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
845 if (srcWidth !is destWidth || srcHeight !is destHeight) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
846 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
847 * Bug in Cairo. When drawing the image streched with an interpolation |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
848 * alghorithm, the edges of the image are faded. This is not a bug, but |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
849 * it is not desired. To avoid the faded edges, it should be possible to |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
850 * use cairo_pattern_set_extend() to set the pattern extend to either |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
851 * CAIRO_EXTEND_REFLECT or CAIRO_EXTEND_PAD, but these are not implemented |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
852 * in some versions of cairo (1.2.x) and have bugs in others (in 1.4.2 it |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
853 * draws with black edges). The fix is to implement CAIRO_EXTEND_REFLECT |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
854 * by creating an image that is 3 times bigger than the original, drawing |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
855 * the original image in every quadrant (with an appropriate transform) and |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
856 * use this image as the pattern. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
857 * |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
858 * NOTE: For some reaons, it is necessary to use CAIRO_EXTEND_PAD with |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
859 * the image that was created or the edges are still faded. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
860 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
861 if (Cairo.cairo_version () >= Cairo.CAIRO_VERSION_ENCODE(1, 4, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
862 auto surface = Cairo.cairo_image_surface_create(Cairo.CAIRO_FORMAT_ARGB32, imgWidth * 3, imgHeight * 3); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
863 auto cr = Cairo.cairo_create(surface); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
864 Cairo.cairo_set_source_surface(cr, srcImage.surface, imgWidth, imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
865 Cairo.cairo_paint(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
866 Cairo.cairo_scale(cr, -1, -1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
867 Cairo.cairo_set_source_surface(cr, srcImage.surface, -imgWidth, -imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
868 Cairo.cairo_paint(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
869 Cairo.cairo_set_source_surface(cr, srcImage.surface, -imgWidth * 3, -imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
870 Cairo.cairo_paint(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
871 Cairo.cairo_set_source_surface(cr, srcImage.surface, -imgWidth, -imgHeight * 3); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
872 Cairo.cairo_paint(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
873 Cairo.cairo_set_source_surface(cr, srcImage.surface, -imgWidth * 3, -imgHeight * 3); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
874 Cairo.cairo_paint(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
875 Cairo.cairo_scale(cr, 1, -1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
876 Cairo.cairo_set_source_surface(cr, srcImage.surface, -imgWidth, imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
877 Cairo.cairo_paint(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
878 Cairo.cairo_set_source_surface(cr, srcImage.surface, -imgWidth * 3, imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
879 Cairo.cairo_paint(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
880 Cairo.cairo_scale(cr, -1, -1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
881 Cairo.cairo_set_source_surface(cr, srcImage.surface, imgWidth, -imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
882 Cairo.cairo_paint(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
883 Cairo.cairo_set_source_surface(cr, srcImage.surface, imgWidth, -imgHeight * 3); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
884 Cairo.cairo_paint(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
885 Cairo.cairo_destroy(cr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
886 auto newPattern = Cairo.cairo_pattern_create_for_surface(surface); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
887 Cairo.cairo_surface_destroy(surface); |
71 | 888 if (newPattern is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
889 Cairo.cairo_pattern_destroy(pattern); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
890 pattern = newPattern; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
891 Cairo.cairo_pattern_set_extend(pattern, Cairo.CAIRO_EXTEND_PAD); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
892 double[] matrix = new double[6]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
893 Cairo.cairo_matrix_init_translate(cast(cairo_matrix_t*)matrix.ptr, imgWidth, imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
894 Cairo.cairo_pattern_set_matrix(pattern, cast(cairo_matrix_t*)matrix.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
895 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
896 // Cairo.cairo_pattern_set_extend(pattern, Cairo.CAIRO_EXTEND_REFLECT); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
897 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
898 Cairo.cairo_pattern_set_filter(pattern, filter); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
899 Cairo.cairo_set_source(cairo, pattern); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
900 if (data.alpha !is 0xFF) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
901 Cairo.cairo_paint_with_alpha(cairo, data.alpha / cast(float)0xFF); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
902 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
903 Cairo.cairo_paint(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
904 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
905 Cairo.cairo_restore(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
906 Cairo.cairo_pattern_destroy(pattern); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
907 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
908 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
909 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
910 if (srcImage.alpha !is -1 || srcImage.alphaData !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
911 drawImageAlpha(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, imgWidth, imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
912 } else if (srcImage.transparentPixel !is -1 || srcImage.mask !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
913 drawImageMask(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, imgWidth, imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
914 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
915 drawImage(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, imgWidth, imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
916 } |
18 | 917 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
918 void drawImage(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, bool simple, int imgWidth, int imgHeight) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
919 if (srcWidth is destWidth && srcHeight is destHeight) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
920 OS.gdk_draw_drawable(data.drawable, handle, srcImage.pixmap, srcX, srcY, destX, destY, destWidth, destHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
921 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
922 if (device.useXRender) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
923 drawImageXRender(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, imgWidth, imgHeight, null, -1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
924 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
925 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
926 auto pixbuf = scale(srcImage.pixmap, srcX, srcY, srcWidth, srcHeight, destWidth, destHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
927 if (pixbuf !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
928 OS.gdk_pixbuf_render_to_drawable(pixbuf, data.drawable, handle, 0, 0, destX, destY, destWidth, destHeight, OS.GDK_RGB_DITHER_NORMAL, 0, 0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
929 OS.g_object_unref(pixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
930 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
931 } |
18 | 932 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
933 void drawImageAlpha(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, bool simple, int imgWidth, int imgHeight) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
934 if (srcImage.alpha is 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
935 if (srcImage.alpha is 255) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
936 drawImage(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, imgWidth, imgHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
937 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
938 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
939 if (device.useXRender) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
940 drawImageXRender(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, imgWidth, imgHeight, srcImage.mask, OS.PictStandardA8); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
941 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
942 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
943 auto pixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, true, 8, srcWidth, srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
944 if (pixbuf is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
945 auto colormap = OS.gdk_colormap_get_system(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
946 OS.gdk_pixbuf_get_from_drawable(pixbuf, srcImage.pixmap, colormap, srcX, srcY, 0, 0, srcWidth, srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
947 int stride = OS.gdk_pixbuf_get_rowstride(pixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
948 auto pixels = OS.gdk_pixbuf_get_pixels(pixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
949 byte[] line = new byte[stride]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
950 byte alpha = cast(byte)srcImage.alpha; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
951 byte[] alphaData = srcImage.alphaData; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
952 for (int y=0; y<srcHeight; y++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
953 int alphaIndex = (y + srcY) * imgWidth + srcX; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
954 memmove(line.ptr, pixels + (y * stride), stride); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
955 for (int x=3; x<stride; x+=4) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
956 line[x] = alphaData is null ? alpha : alphaData[alphaIndex++]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
957 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
958 memmove(pixels + (y * stride), line.ptr, stride); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
959 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
960 if (srcWidth !is destWidth || srcHeight !is destHeight) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
961 auto scaledPixbuf = OS.gdk_pixbuf_scale_simple(pixbuf, destWidth, destHeight, OS.GDK_INTERP_BILINEAR); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
962 OS.g_object_unref(pixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
963 if (scaledPixbuf is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
964 pixbuf = scaledPixbuf; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
965 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
966 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
967 * Feature in GTK. gdk_draw_pixbuf was introduced in GTK+ 2.2.0 and |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
968 * supports clipping. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
969 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
970 if (OS.GTK_VERSION >= OS.buildVERSION (2, 2, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
971 OS.gdk_draw_pixbuf(data.drawable, handle, pixbuf, 0, 0, destX, destY, destWidth, destHeight, OS.GDK_RGB_DITHER_NORMAL, 0, 0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
972 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
973 OS.gdk_pixbuf_render_to_drawable_alpha(pixbuf, data.drawable, 0, 0, destX, destY, destWidth, destHeight, OS.GDK_PIXBUF_ALPHA_BILEVEL, 128, OS.GDK_RGB_DITHER_NORMAL, 0, 0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
974 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
975 OS.g_object_unref(pixbuf); |
18 | 976 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
977 void drawImageMask(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, bool simple, int imgWidth, int imgHeight) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
978 auto drawable = data.drawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
979 auto colorPixmap = srcImage.pixmap; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
980 /* Generate the mask if necessary. */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
981 if (srcImage.transparentPixel !is -1) srcImage.createMask(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
982 auto maskPixmap = srcImage.mask; |
18 | 983 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
984 if (device.useXRender) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
985 drawImageXRender(srcImage, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight, simple, imgWidth, imgHeight, maskPixmap, OS.PictStandardA1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
986 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
987 if (srcWidth !is destWidth || srcHeight !is destHeight) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
988 auto pixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, true, 8, srcWidth, srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
989 if (pixbuf !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
990 auto colormap = OS.gdk_colormap_get_system(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
991 OS.gdk_pixbuf_get_from_drawable(pixbuf, colorPixmap, colormap, srcX, srcY, 0, 0, srcWidth, srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
992 auto maskPixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, false, 8, srcWidth, srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
993 if (maskPixbuf !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
994 OS.gdk_pixbuf_get_from_drawable(maskPixbuf, maskPixmap, null, srcX, srcY, 0, 0, srcWidth, srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
995 int stride = OS.gdk_pixbuf_get_rowstride(pixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
996 auto pixels = OS.gdk_pixbuf_get_pixels(pixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
997 byte[] line = new byte[stride]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
998 int maskStride = OS.gdk_pixbuf_get_rowstride(maskPixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
999 auto maskPixels = OS.gdk_pixbuf_get_pixels(maskPixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1000 byte[] maskLine = new byte[maskStride]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1001 for (int y=0; y<srcHeight; y++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1002 auto offset = pixels + (y * stride); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1003 memmove(line.ptr, offset, stride); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1004 auto maskOffset = maskPixels + (y * maskStride); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1005 memmove(maskLine.ptr, maskOffset, maskStride); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1006 for (int x=0; x<srcWidth; x++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1007 if (maskLine[x * 3] is 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1008 line[x*4+3] = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1009 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1010 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1011 memmove(offset, line.ptr, stride); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1012 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1013 OS.g_object_unref(maskPixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1014 auto scaledPixbuf = OS.gdk_pixbuf_scale_simple(pixbuf, destWidth, destHeight, OS.GDK_INTERP_BILINEAR); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1015 if (scaledPixbuf !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1016 GdkPixmap * colorBuffer; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1017 GdkBitmap * maskBuffer; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1018 OS.gdk_pixbuf_render_pixmap_and_mask(scaledPixbuf, &colorBuffer, &maskBuffer, 128); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1019 colorPixmap = cast(GdkDrawable *)colorBuffer; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1020 maskPixmap = cast(GdkDrawable *)maskBuffer; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1021 OS.g_object_unref(scaledPixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1022 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1023 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1024 OS.g_object_unref(pixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1025 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1026 srcX = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1027 srcY = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1028 srcWidth = destWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1029 srcHeight = destHeight; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1030 } |
18 | 1031 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1032 /* Merge clipping with mask if necessary */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1033 if (data.clipRgn !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1034 int newWidth = srcX + srcWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1035 int newHeight = srcY + srcHeight; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1036 int bytesPerLine = (newWidth + 7) / 8; |
238 | 1037 String maskData = new char[bytesPerLine * newHeight]; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1038 auto mask = cast(GdkDrawable *) OS.gdk_bitmap_create_from_data(null, maskData.ptr, newWidth, newHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1039 if (mask !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1040 auto gc = OS.gdk_gc_new(mask); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1041 OS.gdk_region_offset(data.clipRgn, -destX + srcX, -destY + srcY); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1042 OS.gdk_gc_set_clip_region(gc, data.clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1043 OS.gdk_region_offset(data.clipRgn, destX - srcX, destY - srcY); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1044 GdkColor* color = new GdkColor(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1045 color.pixel = 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1046 OS.gdk_gc_set_foreground(gc, color); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1047 OS.gdk_draw_rectangle(mask, gc, 1, 0, 0, newWidth, newHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1048 OS.gdk_gc_set_function(gc, OS.GDK_AND); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1049 OS.gdk_draw_drawable(mask, gc, maskPixmap, 0, 0, 0, 0, newWidth, newHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1050 OS.g_object_unref(gc); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1051 if (maskPixmap !is null && srcImage.mask !is maskPixmap) OS.g_object_unref(maskPixmap); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1052 maskPixmap = mask; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1053 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1054 } |
18 | 1055 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1056 /* Blit cliping the mask */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1057 GdkGCValues* values = new GdkGCValues(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1058 OS.gdk_gc_get_values(handle, values); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1059 OS.gdk_gc_set_clip_mask(handle, cast(GdkBitmap *)maskPixmap); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1060 OS.gdk_gc_set_clip_origin(handle, destX - srcX, destY - srcY); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1061 OS.gdk_draw_drawable(drawable, handle, colorPixmap, srcX, srcY, destX, destY, srcWidth, srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1062 OS.gdk_gc_set_values(handle, values, OS.GDK_GC_CLIP_MASK | OS.GDK_GC_CLIP_X_ORIGIN | OS.GDK_GC_CLIP_Y_ORIGIN); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1063 if (data.clipRgn !is null) OS.gdk_gc_set_clip_region(handle, data.clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1064 } |
18 | 1065 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1066 /* Destroy scaled pixmaps */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1067 if (colorPixmap !is null && srcImage.pixmap !is colorPixmap) OS.g_object_unref(colorPixmap); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1068 if (maskPixmap !is null && srcImage.mask !is maskPixmap) OS.g_object_unref(maskPixmap); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1069 /* Destroy the image mask if the there is a GC created on the image */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1070 if (srcImage.transparentPixel !is -1 && srcImage.memGC !is null) srcImage.destroyMask(); |
18 | 1071 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1072 void drawImageXRender(Image srcImage, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight, bool simple, int imgWidth, int imgHeight, GdkDrawable* maskPixmap, int maskType) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1073 int translateX = 0, translateY = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1074 auto drawable = data.drawable; |
240 | 1075 if (data.image is null && !data.realDrawable) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1076 int x, y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1077 GdkDrawable* real_drawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1078 OS.gdk_window_get_internal_paint_info(cast(GdkWindow*)drawable, &real_drawable, &x, &y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1079 drawable = real_drawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1080 translateX = -x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1081 translateY = -y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1082 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1083 auto xDisplay = OS.GDK_DISPLAY(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1084 int maskPict = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1085 if (maskPixmap !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1086 int attribCount = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1087 XRenderPictureAttributes* attrib; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1088 if (srcImage.alpha !is -1) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1089 attribCount = 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1090 attrib = new XRenderPictureAttributes(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1091 attrib.repeat = true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1092 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1093 maskPict = OS.XRenderCreatePicture(cast(void*)xDisplay, OS.gdk_x11_drawable_get_xid(maskPixmap), OS.XRenderFindStandardFormat(cast(void*)xDisplay, maskType), attribCount, attrib); |
71 | 1094 if (maskPict is 0) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1095 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1096 auto format = OS.XRenderFindVisualFormat(cast(void*)xDisplay, OS.gdk_x11_visual_get_xvisual(OS.gdk_visual_get_system())); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1097 auto destPict = OS.XRenderCreatePicture(cast(void*)xDisplay, OS.gdk_x11_drawable_get_xid(drawable), format, 0, null); |
71 | 1098 if (destPict is 0) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1099 int srcPict = OS.XRenderCreatePicture(xDisplay, OS.gdk_x11_drawable_get_xid(srcImage.pixmap), format, 0, null); |
71 | 1100 if (srcPict is 0) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1101 if (srcWidth !is destWidth || srcHeight !is destHeight) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1102 int[] transform = [cast(int)((cast(float)srcWidth / destWidth) * 65536), 0, 0, 0, cast(int)((cast(float)srcHeight / destHeight) * 65536), 0, 0, 0, 65536]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1103 OS.XRenderSetPictureTransform(xDisplay, srcPict, cast(XTransform*)transform.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1104 if (maskPict !is 0) OS.XRenderSetPictureTransform(xDisplay, maskPict, cast(XTransform*)transform.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1105 srcX *= destWidth / cast(float)srcWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1106 srcY *= destHeight / cast(float)srcHeight; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1107 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1108 auto clipping = data.clipRgn; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1109 if (data.damageRgn !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1110 if (clipping is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1111 clipping = data.damageRgn; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1112 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1113 clipping = OS.gdk_region_new(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1114 OS.gdk_region_union(clipping, data.clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1115 OS.gdk_region_intersect(clipping, data.damageRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1116 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1117 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1118 if (clipping !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1119 int nRects; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1120 GdkRectangle* rects; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1121 OS.gdk_region_get_rectangles(clipping, &rects, &nRects); |
202 | 1122 GdkRectangle* rect; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1123 short[] xRects = new short[nRects * 4]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1124 for (int i=0, j=0; i<nRects; i++, j+=4) { |
202 | 1125 rect = rects +i; |
1126 xRects[j ] = cast(short)rect.x; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1127 xRects[j+1] = cast(short)rect.y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1128 xRects[j+2] = cast(short)rect.width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1129 xRects[j+3] = cast(short)rect.height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1130 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1131 OS.XRenderSetPictureClipRectangles(xDisplay, destPict, translateX, translateY,cast(XRectangle*) xRects.ptr, nRects); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1132 if (clipping !is data.clipRgn && clipping !is data.damageRgn) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1133 OS.gdk_region_destroy(clipping); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1134 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1135 if (rects !is null) OS.g_free(rects); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1136 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1137 OS.XRenderComposite(xDisplay, maskPict !is 0 ? OS.PictOpOver : OS.PictOpSrc, srcPict, maskPict, destPict, srcX, srcY, srcX, srcY, destX + translateX, destY + translateY, destWidth, destHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1138 OS.XRenderFreePicture(xDisplay, destPict); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1139 OS.XRenderFreePicture(xDisplay, srcPict); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1140 if (maskPict !is 0) OS.XRenderFreePicture(xDisplay, maskPict); |
18 | 1141 } |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1142 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1143 GdkPixbuf* scale(GdkDrawable* src, int srcX, int srcY, int srcWidth, int srcHeight, int destWidth, int destHeight) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1144 auto pixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, false, 8, srcWidth, srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1145 if (pixbuf is null) return null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1146 auto colormap = OS.gdk_colormap_get_system(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1147 OS.gdk_pixbuf_get_from_drawable(pixbuf, src, colormap, srcX, srcY, 0, 0, srcWidth, srcHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1148 auto scaledPixbuf = OS.gdk_pixbuf_scale_simple(pixbuf, destWidth, destHeight, OS.GDK_INTERP_BILINEAR); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1149 OS.g_object_unref(pixbuf); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1150 return scaledPixbuf; |
18 | 1151 } |
1152 | |
1153 /** | |
1154 * Draws a line, using the foreground color, between the points | |
1155 * (<code>x1</code>, <code>y1</code>) and (<code>x2</code>, <code>y2</code>). | |
1156 * | |
1157 * @param x1 the first point's x coordinate | |
1158 * @param y1 the first point's y coordinate | |
1159 * @param x2 the second point's x coordinate | |
1160 * @param y2 the second point's y coordinate | |
1161 * | |
71 | 1162 * @exception DWTException <ul> |
18 | 1163 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1164 * </ul> | |
1165 */ | |
1166 public void drawLine(int x1, int y1, int x2, int y2) { | |
71 | 1167 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1168 checkGC(DRAW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1169 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1170 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1171 double xOffset = data.cairoXoffset, yOffset = data.cairoYoffset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1172 Cairo.cairo_move_to(cairo, x1 + xOffset, y1 + yOffset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1173 Cairo.cairo_line_to(cairo, x2 + xOffset, y2 + yOffset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1174 Cairo.cairo_stroke(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1175 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1176 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1177 OS.gdk_draw_line (data.drawable, handle, x1, y1, x2, y2); |
18 | 1178 } |
1179 | |
1180 /** | |
1181 * Draws the outline of an oval, using the foreground color, | |
1182 * within the specified rectangular area. | |
1183 * <p> | |
1184 * The result is a circle or ellipse that fits within the | |
1185 * rectangle specified by the <code>x</code>, <code>y</code>, | |
1186 * <code>width</code>, and <code>height</code> arguments. | |
1187 * </p><p> | |
1188 * The oval covers an area that is <code>width + 1</code> | |
1189 * pixels wide and <code>height + 1</code> pixels tall. | |
1190 * </p> | |
1191 * | |
1192 * @param x the x coordinate of the upper left corner of the oval to be drawn | |
1193 * @param y the y coordinate of the upper left corner of the oval to be drawn | |
1194 * @param width the width of the oval to be drawn | |
1195 * @param height the height of the oval to be drawn | |
1196 * | |
71 | 1197 * @exception DWTException <ul> |
18 | 1198 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1199 * </ul> | |
1200 */ | |
1201 public void drawOval(int x, int y, int width, int height) { | |
71 | 1202 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1203 checkGC(DRAW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1204 if (width < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1205 x = x + width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1206 width = -width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1207 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1208 if (height < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1209 y = y + height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1210 height = -height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1211 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1212 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1213 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1214 double xOffset = data.cairoXoffset, yOffset = data.cairoYoffset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1215 if (width is height) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1216 Cairo.cairo_arc_negative(cairo, x + xOffset + width / 2f, y + yOffset + height / 2f, width / 2f, 0, -2 * cast(float)Compatibility.PI); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1217 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1218 Cairo.cairo_save(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1219 Cairo.cairo_translate(cairo, x + xOffset + width / 2f, y + yOffset + height / 2f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1220 Cairo.cairo_scale(cairo, width / 2f, height / 2f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1221 Cairo.cairo_arc_negative(cairo, 0, 0, 1, 0, -2 * cast(float)Compatibility.PI); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1222 Cairo.cairo_restore(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1223 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1224 Cairo.cairo_stroke(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1225 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1226 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1227 OS.gdk_draw_arc(data.drawable, handle, 0, x, y, width, height, 0, 23040); |
18 | 1228 } |
1229 | |
1230 /** | |
1231 * Draws the path described by the parameter. | |
1232 * <p> | |
1233 * This operation requires the operating system's advanced | |
1234 * graphics subsystem which may not be available on some | |
1235 * platforms. | |
1236 * </p> | |
1237 * | |
1238 * @param path the path to draw | |
1239 * | |
1240 * @exception IllegalArgumentException <ul> | |
1241 * <li>ERROR_NULL_ARGUMENT - if the parameter is null</li> | |
1242 * <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li> | |
1243 * </ul> | |
71 | 1244 * @exception DWTException <ul> |
18 | 1245 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1246 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
1247 * </ul> | |
1248 * | |
1249 * @see Path | |
1250 * | |
1251 * @since 3.1 | |
1252 */ | |
1253 public void drawPath(Path path) { | |
71 | 1254 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
1255 if (path is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
1256 if (path.handle is null) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1257 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1258 checkGC(DRAW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1259 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1260 Cairo.cairo_save(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1261 double xOffset = data.cairoXoffset, yOffset = data.cairoYoffset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1262 Cairo.cairo_translate(cairo, xOffset, yOffset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1263 auto copy = Cairo.cairo_copy_path(path.handle); |
71 | 1264 if (copy is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1265 Cairo.cairo_append_path(cairo, copy); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1266 Cairo.cairo_path_destroy(copy); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1267 Cairo.cairo_stroke(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1268 Cairo.cairo_restore(cairo); |
18 | 1269 } |
1270 | |
1271 /** | |
1272 * Draws a pixel, using the foreground color, at the specified | |
1273 * point (<code>x</code>, <code>y</code>). | |
1274 * <p> | |
1275 * Note that the receiver's line attributes do not affect this | |
1276 * operation. | |
1277 * </p> | |
1278 * | |
1279 * @param x the point's x coordinate | |
1280 * @param y the point's y coordinate | |
1281 * | |
71 | 1282 * @exception DWTException <ul> |
18 | 1283 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1284 * </ul> | |
1285 * | |
1286 * @since 3.0 | |
1287 */ | |
1288 public void drawPoint (int x, int y) { | |
71 | 1289 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1290 checkGC(DRAW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1291 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1292 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1293 Cairo.cairo_rectangle(cairo, x, y, 1, 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1294 Cairo.cairo_fill(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1295 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1296 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1297 OS.gdk_draw_point(data.drawable, handle, x, y); |
18 | 1298 } |
1299 | |
1300 /** | |
1301 * Draws the closed polygon which is defined by the specified array | |
1302 * of integer coordinates, using the receiver's foreground color. The array | |
1303 * contains alternating x and y values which are considered to represent | |
1304 * points which are the vertices of the polygon. Lines are drawn between | |
1305 * each consecutive pair, and between the first pair and last pair in the | |
1306 * array. | |
1307 * | |
1308 * @param pointArray an array of alternating x and y values which are the vertices of the polygon | |
1309 * | |
71 | 1310 * @exception DWTException <ul> |
18 | 1311 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1312 * </ul> | |
1313 */ | |
1314 public void drawPolygon(int[] pointArray) { | |
71 | 1315 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
256
8d1948844918
Allow null strings and arrays
Frank Benoit <benoit@tionex.de>
parents:
255
diff
changeset
|
1316 // DWT externsion: allow null array |
8d1948844918
Allow null strings and arrays
Frank Benoit <benoit@tionex.de>
parents:
255
diff
changeset
|
1317 //if (pointArray is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1318 checkGC(DRAW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1319 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1320 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1321 drawPolyline(cairo, pointArray, true); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1322 Cairo.cairo_stroke(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1323 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1324 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1325 OS.gdk_draw_polygon(data.drawable, handle, 0, cast(GdkPoint*)pointArray.ptr, pointArray.length / 2); |
18 | 1326 } |
1327 | |
1328 /** | |
1329 * Draws the polyline which is defined by the specified array | |
1330 * of integer coordinates, using the receiver's foreground color. The array | |
1331 * contains alternating x and y values which are considered to represent | |
1332 * points which are the corners of the polyline. Lines are drawn between | |
1333 * each consecutive pair, but not between the first pair and last pair in | |
1334 * the array. | |
1335 * | |
1336 * @param pointArray an array of alternating x and y values which are the corners of the polyline | |
1337 * | |
71 | 1338 * @exception DWTException <ul> |
18 | 1339 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1340 * </ul> | |
1341 */ | |
1342 public void drawPolyline(int[] pointArray) { | |
71 | 1343 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
256
8d1948844918
Allow null strings and arrays
Frank Benoit <benoit@tionex.de>
parents:
255
diff
changeset
|
1344 // DWT externsion: allow null array |
8d1948844918
Allow null strings and arrays
Frank Benoit <benoit@tionex.de>
parents:
255
diff
changeset
|
1345 //if (pointArray is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1346 checkGC(DRAW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1347 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1348 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1349 drawPolyline(cairo, pointArray, false); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1350 Cairo.cairo_stroke(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1351 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1352 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1353 OS.gdk_draw_lines(data.drawable, handle, cast(GdkPoint*)pointArray.ptr, pointArray.length / 2); |
18 | 1354 } |
1355 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1356 void drawPolyline(cairo_t* cairo, int[] pointArray, bool close) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1357 int count = pointArray.length / 2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1358 if (count is 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1359 double xOffset = data.cairoXoffset, yOffset = data.cairoYoffset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1360 Cairo.cairo_move_to(cairo, pointArray[0] + xOffset, pointArray[1] + yOffset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1361 for (int i = 1, j=2; i < count; i++, j += 2) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1362 Cairo.cairo_line_to(cairo, pointArray[j] + xOffset, pointArray[j + 1] + yOffset); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1363 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1364 if (close) Cairo.cairo_close_path(cairo); |
18 | 1365 } |
1366 | |
1367 /** | |
1368 * Draws the outline of the rectangle specified by the arguments, | |
1369 * using the receiver's foreground color. The left and right edges | |
1370 * of the rectangle are at <code>x</code> and <code>x + width</code>. | |
1371 * The top and bottom edges are at <code>y</code> and <code>y + height</code>. | |
1372 * | |
1373 * @param x the x coordinate of the rectangle to be drawn | |
1374 * @param y the y coordinate of the rectangle to be drawn | |
1375 * @param width the width of the rectangle to be drawn | |
1376 * @param height the height of the rectangle to be drawn | |
1377 * | |
71 | 1378 * @exception DWTException <ul> |
18 | 1379 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1380 * </ul> | |
1381 */ | |
1382 public void drawRectangle(int x, int y, int width, int height) { | |
71 | 1383 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1384 checkGC(DRAW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1385 if (width < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1386 x = x + width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1387 width = -width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1388 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1389 if (height < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1390 y = y + height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1391 height = -height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1392 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1393 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1394 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1395 double xOffset = data.cairoXoffset, yOffset = data.cairoYoffset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1396 Cairo.cairo_rectangle(cairo, x + xOffset, y + yOffset, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1397 Cairo.cairo_stroke(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1398 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1399 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1400 OS.gdk_draw_rectangle(data.drawable, handle, 0, x, y, width, height); |
18 | 1401 } |
1402 | |
1403 /** | |
1404 * Draws the outline of the specified rectangle, using the receiver's | |
1405 * foreground color. The left and right edges of the rectangle are at | |
1406 * <code>rect.x</code> and <code>rect.x + rect.width</code>. The top | |
1407 * and bottom edges are at <code>rect.y</code> and | |
1408 * <code>rect.y + rect.height</code>. | |
1409 * | |
1410 * @param rect the rectangle to draw | |
1411 * | |
1412 * @exception IllegalArgumentException <ul> | |
1413 * <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li> | |
1414 * </ul> | |
71 | 1415 * @exception DWTException <ul> |
18 | 1416 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1417 * </ul> | |
1418 */ | |
1419 public void drawRectangle(Rectangle rect) { | |
71 | 1420 if (rect is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1421 drawRectangle (rect.x, rect.y, rect.width, rect.height); |
18 | 1422 } |
1423 /** | |
1424 * Draws the outline of the round-cornered rectangle specified by | |
1425 * the arguments, using the receiver's foreground color. The left and | |
1426 * right edges of the rectangle are at <code>x</code> and <code>x + width</code>. | |
1427 * The top and bottom edges are at <code>y</code> and <code>y + height</code>. | |
1428 * The <em>roundness</em> of the corners is specified by the | |
1429 * <code>arcWidth</code> and <code>arcHeight</code> arguments, which | |
1430 * are respectively the width and height of the ellipse used to draw | |
1431 * the corners. | |
1432 * | |
1433 * @param x the x coordinate of the rectangle to be drawn | |
1434 * @param y the y coordinate of the rectangle to be drawn | |
1435 * @param width the width of the rectangle to be drawn | |
1436 * @param height the height of the rectangle to be drawn | |
1437 * @param arcWidth the width of the arc | |
1438 * @param arcHeight the height of the arc | |
1439 * | |
71 | 1440 * @exception DWTException <ul> |
18 | 1441 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1442 * </ul> | |
1443 */ | |
1444 public void drawRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) { | |
71 | 1445 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1446 checkGC(DRAW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1447 int nx = x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1448 int ny = y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1449 int nw = width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1450 int nh = height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1451 int naw = arcWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1452 int nah = arcHeight; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1453 if (nw < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1454 nw = 0 - nw; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1455 nx = nx - nw; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1456 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1457 if (nh < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1458 nh = 0 - nh; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1459 ny = ny -nh; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1460 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1461 if (naw < 0) naw = 0 - naw; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1462 if (nah < 0) nah = 0 - nah; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1463 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1464 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1465 double xOffset = data.cairoXoffset, yOffset = data.cairoYoffset; |
240 | 1466 if (naw is 0 || nah is 0) { |
1467 Cairo.cairo_rectangle(cairo, x + xOffset, y + yOffset, width, height); | |
1468 } else { | |
1469 float naw2 = naw / 2f; | |
1470 float nah2 = nah / 2f; | |
1471 float fw = nw / naw2; | |
1472 float fh = nh / nah2; | |
1473 Cairo.cairo_save(cairo); | |
1474 Cairo.cairo_translate(cairo, nx + xOffset, ny + yOffset); | |
1475 Cairo.cairo_scale(cairo, naw2, nah2); | |
1476 Cairo.cairo_move_to(cairo, fw - 1, 0); | |
1477 Cairo.cairo_arc(cairo, fw - 1, 1, 1, Compatibility.PI + Compatibility.PI/2.0, Compatibility.PI*2.0); | |
1478 Cairo.cairo_arc(cairo, fw - 1, fh - 1, 1, 0, Compatibility.PI/2.0); | |
1479 Cairo.cairo_arc(cairo, 1, fh - 1, 1, Compatibility.PI/2, Compatibility.PI); | |
1480 Cairo.cairo_arc(cairo, 1, 1, 1, Compatibility.PI, 270.0*Compatibility.PI/180.0); | |
1481 Cairo.cairo_close_path(cairo); | |
1482 Cairo.cairo_restore(cairo); | |
1483 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1484 Cairo.cairo_stroke(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1485 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1486 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1487 int naw2 = naw / 2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1488 int nah2 = nah / 2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1489 auto drawable = data.drawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1490 if (nw > naw) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1491 if (nh > nah) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1492 OS.gdk_draw_arc(drawable, handle, 0, nx, ny, naw, nah, 5760, 5760); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1493 OS.gdk_draw_line(drawable, handle, nx + naw2, ny, nx + nw - naw2, ny); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1494 OS.gdk_draw_arc(drawable, handle, 0, nx + nw - naw, ny, naw, nah, 0, 5760); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1495 OS.gdk_draw_line(drawable, handle, nx + nw, ny + nah2, nx + nw, ny + nh - nah2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1496 OS.gdk_draw_arc(drawable, handle, 0, nx + nw - naw, ny + nh - nah, naw, nah, 17280, 5760); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1497 OS.gdk_draw_line(drawable,handle, nx + naw2, ny + nh, nx + nw - naw2, ny + nh); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1498 OS.gdk_draw_arc(drawable, handle, 0, nx, ny + nh - nah, naw, nah, 11520, 5760); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1499 OS.gdk_draw_line(drawable, handle, nx, ny + nah2, nx, ny + nh - nah2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1500 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1501 OS.gdk_draw_arc(drawable, handle, 0, nx, ny, naw, nh, 5760, 11520); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1502 OS.gdk_draw_line(drawable, handle, nx + naw2, ny, nx + nw - naw2, ny); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1503 OS.gdk_draw_arc(drawable, handle, 0, nx + nw - naw, ny, naw, nh, 17280, 11520); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1504 OS.gdk_draw_line(drawable,handle, nx + naw2, ny + nh, nx + nw - naw2, ny + nh); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1505 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1506 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1507 if (nh > nah) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1508 OS.gdk_draw_arc(drawable, handle, 0, nx, ny, nw, nah, 0, 11520); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1509 OS.gdk_draw_line(drawable, handle, nx + nw, ny + nah2, nx + nw, ny + nh - nah2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1510 OS.gdk_draw_arc(drawable, handle, 0, nx, ny + nh - nah, nw, nah, 11520, 11520); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1511 OS.gdk_draw_line(drawable,handle, nx, ny + nah2, nx, ny + nh - nah2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1512 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1513 OS.gdk_draw_arc(drawable, handle, 0, nx, ny, nw, nh, 0, 23040); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1514 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1515 } |
18 | 1516 } |
1517 | |
1518 /** | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1519 * Draws the given str, using the receiver's current font and |
18 | 1520 * foreground color. No tab expansion or carriage return processing |
1521 * will be performed. The background of the rectangular area where | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1522 * the str is being drawn will be filled with the receiver's |
18 | 1523 * background color. |
1524 * | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1525 * @param str the str to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1526 * @param x the x coordinate of the top left corner of the rectangular area where the str is to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1527 * @param y the y coordinate of the top left corner of the rectangular area where the str is to be drawn |
18 | 1528 * |
71 | 1529 * @exception DWTException <ul> |
18 | 1530 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1531 * </ul> | |
1532 */ | |
238 | 1533 public void drawString (String str, int x, int y) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1534 drawString(str, x, y, false); |
18 | 1535 } |
1536 /** | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1537 * Draws the given str, using the receiver's current font and |
18 | 1538 * foreground color. No tab expansion or carriage return processing |
1539 * will be performed. If <code>isTransparent</code> is <code>true</code>, | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1540 * then the background of the rectangular area where the str is being |
18 | 1541 * drawn will not be modified, otherwise it will be filled with the |
1542 * receiver's background color. | |
1543 * | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1544 * @param str the str to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1545 * @param x the x coordinate of the top left corner of the rectangular area where the str is to be drawn |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1546 * @param y the y coordinate of the top left corner of the rectangular area where the str is to be drawn |
18 | 1547 * @param isTransparent if <code>true</code> the background will be transparent, otherwise it will be opaque |
1548 * | |
71 | 1549 * @exception DWTException <ul> |
18 | 1550 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1551 * </ul> | |
1552 */ | |
238 | 1553 public void drawString(String str, int x, int y, bool isTransparent) { |
71 | 1554 drawText(str, x, y, isTransparent ? DWT.DRAW_TRANSPARENT : 0); |
18 | 1555 } |
1556 | |
1557 /** | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1558 * Draws the given str, using the receiver's current font and |
18 | 1559 * foreground color. Tab expansion and carriage return processing |
1560 * are performed. The background of the rectangular area where | |
1561 * the text is being drawn will be filled with the receiver's | |
1562 * background color. | |
1563 * | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1564 * @param str the str to be drawn |
18 | 1565 * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn |
1566 * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn | |
1567 * | |
71 | 1568 * @exception DWTException <ul> |
18 | 1569 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1570 * </ul> | |
1571 */ | |
238 | 1572 public void drawText(String str, int x, int y) { |
71 | 1573 drawText(str, x, y, DWT.DRAW_DELIMITER | DWT.DRAW_TAB); |
18 | 1574 } |
1575 | |
1576 /** | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1577 * Draws the given str, using the receiver's current font and |
18 | 1578 * foreground color. Tab expansion and carriage return processing |
1579 * are performed. If <code>isTransparent</code> is <code>true</code>, | |
1580 * then the background of the rectangular area where the text is being | |
1581 * drawn will not be modified, otherwise it will be filled with the | |
1582 * receiver's background color. | |
1583 * | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1584 * @param str the str to be drawn |
18 | 1585 * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn |
1586 * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn | |
1587 * @param isTransparent if <code>true</code> the background will be transparent, otherwise it will be opaque | |
1588 * | |
71 | 1589 * @exception DWTException <ul> |
18 | 1590 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1591 * </ul> | |
1592 */ | |
238 | 1593 public void drawText(String str, int x, int y, bool isTransparent) { |
71 | 1594 int flags = DWT.DRAW_DELIMITER | DWT.DRAW_TAB; |
1595 if (isTransparent) flags |= DWT.DRAW_TRANSPARENT; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1596 drawText(str, x, y, flags); |
18 | 1597 } |
1598 | |
1599 /** | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1600 * Draws the given str, using the receiver's current font and |
18 | 1601 * foreground color. Tab expansion, line delimiter and mnemonic |
1602 * processing are performed according to the specified flags. If | |
1603 * <code>flags</code> includes <code>DRAW_TRANSPARENT</code>, | |
1604 * then the background of the rectangular area where the text is being | |
1605 * drawn will not be modified, otherwise it will be filled with the | |
1606 * receiver's background color. | |
1607 * <p> | |
1608 * The parameter <code>flags</code> may be a combination of: | |
1609 * <dl> | |
1610 * <dt><b>DRAW_DELIMITER</b></dt> | |
1611 * <dd>draw multiple lines</dd> | |
1612 * <dt><b>DRAW_TAB</b></dt> | |
1613 * <dd>expand tabs</dd> | |
1614 * <dt><b>DRAW_MNEMONIC</b></dt> | |
1615 * <dd>underline the mnemonic character</dd> | |
1616 * <dt><b>DRAW_TRANSPARENT</b></dt> | |
1617 * <dd>transparent background</dd> | |
1618 * </dl> | |
1619 * </p> | |
1620 * | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1621 * @param str the str to be drawn |
18 | 1622 * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn |
1623 * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn | |
1624 * @param flags the flags specifying how to process the text | |
1625 * | |
71 | 1626 * @exception DWTException <ul> |
18 | 1627 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1628 * </ul> | |
1629 */ | |
238 | 1630 public void drawText (String str, int x, int y, int flags) { |
71 | 1631 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
256
8d1948844918
Allow null strings and arrays
Frank Benoit <benoit@tionex.de>
parents:
255
diff
changeset
|
1632 // DWT extension: allow null string |
8d1948844918
Allow null strings and arrays
Frank Benoit <benoit@tionex.de>
parents:
255
diff
changeset
|
1633 //if (str is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1634 if (str.length is 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1635 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1636 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1637 if (OS.GTK_VERSION < OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1638 //TODO - honor flags |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1639 checkGC(FOREGROUND | FONT); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1640 cairo_font_extents_t* extents = new cairo_font_extents_t(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1641 Cairo.cairo_font_extents(cairo, extents); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1642 double baseline = y + extents.ascent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1643 Cairo.cairo_move_to(cairo, x, baseline); |
199
a5adab24940b
Fix missing string termination, thx nascent for example code.
Frank Benoit <benoit@tionex.de>
parents:
194
diff
changeset
|
1644 char* buffer = toStringz( str ); |
a5adab24940b
Fix missing string termination, thx nascent for example code.
Frank Benoit <benoit@tionex.de>
parents:
194
diff
changeset
|
1645 Cairo.cairo_show_text(cairo, buffer); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1646 Cairo.cairo_new_path(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1647 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1648 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1649 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1650 setString(str, flags); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1651 if (cairo !is null) { |
71 | 1652 if ((flags & DWT.DRAW_TRANSPARENT) is 0) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1653 checkGC(BACKGROUND); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1654 int width, height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1655 OS.pango_layout_get_size(data.layout, &width, &height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1656 Cairo.cairo_rectangle(cairo, x, y, OS.PANGO_PIXELS(width), OS.PANGO_PIXELS(height)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1657 Cairo.cairo_fill(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1658 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1659 checkGC(FOREGROUND | FONT); |
240 | 1660 if ((data.style & DWT.MIRRORED) !is 0) { |
1661 Cairo.cairo_save(cairo); | |
1662 int width, height; | |
1663 OS.pango_layout_get_size(data.layout, &width, &height); | |
1664 Cairo.cairo_scale(cairo, -1f, 1); | |
1665 Cairo.cairo_translate(cairo, -2 * x - OS.PANGO_PIXELS(width), 0); | |
1666 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1667 Cairo.cairo_move_to(cairo, x, y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1668 OS.pango_cairo_show_layout(cairo, data.layout); |
240 | 1669 if ((data.style & DWT.MIRRORED) !is 0) { |
1670 Cairo.cairo_restore(cairo); | |
1671 } | |
1672 Cairo.cairo_new_path(cairo); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1673 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1674 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1675 checkGC(FOREGROUND | FONT | BACKGROUND_BG); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1676 GdkColor* background = null; |
71 | 1677 if ((flags & DWT.DRAW_TRANSPARENT) is 0) background = data.background; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1678 if (!data.xorMode) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1679 OS.gdk_draw_layout_with_colors(data.drawable, handle, x, y, data.layout, null, background); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1680 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1681 auto layout = data.layout; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1682 int w, h; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1683 OS.pango_layout_get_size(layout, &w, &h); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1684 int width = OS.PANGO_PIXELS(w); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1685 int height = OS.PANGO_PIXELS(h); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1686 auto pixmap = OS.gdk_pixmap_new(cast(GdkDrawable*)OS.GDK_ROOT_PARENT(), width, height, -1); |
71 | 1687 if (pixmap is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1688 auto gdkGC = OS.gdk_gc_new(cast(GdkDrawable*)pixmap); |
71 | 1689 if (gdkGC is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1690 GdkColor* black = new GdkColor(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1691 OS.gdk_gc_set_foreground(gdkGC, black); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1692 OS.gdk_draw_rectangle(cast(GdkDrawable*)pixmap, gdkGC, 1, 0, 0, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1693 OS.gdk_gc_set_foreground(gdkGC, data.foreground); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1694 OS.gdk_draw_layout_with_colors(cast(GdkDrawable*)pixmap, gdkGC, 0, 0, layout, null, background); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1695 OS.g_object_unref(gdkGC); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1696 OS.gdk_draw_drawable(data.drawable, handle, cast(GdkDrawable*)pixmap, 0, 0, x, y, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1697 OS.g_object_unref(pixmap); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1698 } |
18 | 1699 } |
1700 | |
1701 /** | |
1702 * Compares the argument to the receiver, and returns true | |
1703 * if they represent the <em>same</em> object using a class | |
1704 * specific comparison. | |
1705 * | |
1706 * @param object the object to compare with this object | |
1707 * @return <code>true</code> if the object is the same as this object and <code>false</code> otherwise | |
1708 * | |
1709 * @see #hashCode | |
1710 */ | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1711 public override int opEquals(Object object) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1712 if (object is this) return true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1713 if ( auto gc = cast(GC)object){ |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1714 return handle is gc.handle; |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1715 } |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1716 return false; |
18 | 1717 } |
1718 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1719 |
18 | 1720 /** |
1721 * Fills the interior of a circular or elliptical arc within | |
1722 * the specified rectangular area, with the receiver's background | |
1723 * color. | |
1724 * <p> | |
1725 * The resulting arc begins at <code>startAngle</code> and extends | |
1726 * for <code>arcAngle</code> degrees, using the current color. | |
1727 * Angles are interpreted such that 0 degrees is at the 3 o'clock | |
1728 * position. A positive value indicates a counter-clockwise rotation | |
1729 * while a negative value indicates a clockwise rotation. | |
1730 * </p><p> | |
1731 * The center of the arc is the center of the rectangle whose origin | |
1732 * is (<code>x</code>, <code>y</code>) and whose size is specified by the | |
1733 * <code>width</code> and <code>height</code> arguments. | |
1734 * </p><p> | |
1735 * The resulting arc covers an area <code>width + 1</code> pixels wide | |
1736 * by <code>height + 1</code> pixels tall. | |
1737 * </p> | |
1738 * | |
1739 * @param x the x coordinate of the upper-left corner of the arc to be filled | |
1740 * @param y the y coordinate of the upper-left corner of the arc to be filled | |
1741 * @param width the width of the arc to be filled | |
1742 * @param height the height of the arc to be filled | |
1743 * @param startAngle the beginning angle | |
1744 * @param arcAngle the angular extent of the arc, relative to the start angle | |
1745 * | |
71 | 1746 * @exception DWTException <ul> |
18 | 1747 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1748 * </ul> | |
1749 * | |
1750 * @see #drawArc | |
1751 */ | |
1752 public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) { | |
71 | 1753 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1754 checkGC(FILL); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1755 if (width < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1756 x = x + width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1757 width = -width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1758 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1759 if (height < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1760 y = y + height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1761 height = -height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1762 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1763 if (width is 0 || height is 0 || arcAngle is 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1764 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1765 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1766 if (width is height) { |
18 | 1767 if (arcAngle >= 0) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1768 Cairo.cairo_arc_negative(cairo, x + width / 2f, y + height / 2f, width / 2f, -startAngle * cast(float)Compatibility.PI / 180, -(startAngle + arcAngle) * cast(float)Compatibility.PI / 180); |
18 | 1769 } else { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1770 Cairo.cairo_arc(cairo, x + width / 2f, y + height / 2f, width / 2f, -startAngle * cast(float)Compatibility.PI / 180, -(startAngle + arcAngle) * cast(float)Compatibility.PI / 180); |
18 | 1771 } |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1772 Cairo.cairo_line_to(cairo, x + width / 2f, y + height / 2f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1773 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1774 Cairo.cairo_save(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1775 Cairo.cairo_translate(cairo, x + width / 2f, y + height / 2f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1776 Cairo.cairo_scale(cairo, width / 2f, height / 2f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1777 if (arcAngle >= 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1778 Cairo.cairo_arc_negative(cairo, 0, 0, 1, -startAngle * cast(float)Compatibility.PI / 180, -(startAngle + arcAngle) * cast(float)Compatibility.PI / 180); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1779 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1780 Cairo.cairo_arc(cairo, 0, 0, 1, -startAngle * cast(float)Compatibility.PI / 180, -(startAngle + arcAngle) * cast(float)Compatibility.PI / 180); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1781 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1782 Cairo.cairo_line_to(cairo, 0, 0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1783 Cairo.cairo_restore(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1784 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1785 Cairo.cairo_fill(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1786 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1787 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1788 OS.gdk_draw_arc(data.drawable, handle, 1, x, y, width, height, startAngle * 64, arcAngle * 64); |
18 | 1789 } |
1790 | |
1791 /** | |
1792 * Fills the interior of the specified rectangle with a gradient | |
1793 * sweeping from left to right or top to bottom progressing | |
1794 * from the receiver's foreground color to its background color. | |
1795 * | |
1796 * @param x the x coordinate of the rectangle to be filled | |
1797 * @param y the y coordinate of the rectangle to be filled | |
1798 * @param width the width of the rectangle to be filled, may be negative | |
1799 * (inverts direction of gradient if horizontal) | |
1800 * @param height the height of the rectangle to be filled, may be negative | |
1801 * (inverts direction of gradient if vertical) | |
1802 * @param vertical if true sweeps from top to bottom, else | |
1803 * sweeps from left to right | |
1804 * | |
71 | 1805 * @exception DWTException <ul> |
18 | 1806 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1807 * </ul> | |
1808 * | |
1809 * @see #drawRectangle(int, int, int, int) | |
1810 */ | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
1811 public void fillGradientRectangle(int x, int y, int width, int height, bool vertical) { |
71 | 1812 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1813 if ((width is 0) || (height is 0)) return; |
18 | 1814 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1815 /* Rewrite this to use GdkPixbuf */ |
18 | 1816 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1817 RGB backgroundRGB, foregroundRGB; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1818 backgroundRGB = getBackground().getRGB(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1819 foregroundRGB = getForeground().getRGB(); |
18 | 1820 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1821 RGB fromRGB, toRGB; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1822 fromRGB = foregroundRGB; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1823 toRGB = backgroundRGB; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1824 bool swapColors = false; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1825 if (width < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1826 x += width; width = -width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1827 if (! vertical) swapColors = true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1828 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1829 if (height < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1830 y += height; height = -height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1831 if (vertical) swapColors = true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1832 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1833 if (swapColors) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1834 fromRGB = backgroundRGB; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1835 toRGB = foregroundRGB; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1836 } |
194 | 1837 if (fromRGB.opEquals(toRGB)) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1838 fillRectangle(x, y, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1839 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1840 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1841 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1842 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1843 cairo_pattern_t* pattern; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1844 if (vertical) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1845 pattern = Cairo.cairo_pattern_create_linear (0.0, 0.0, 0.0, 1.0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1846 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1847 pattern = Cairo.cairo_pattern_create_linear (0.0, 0.0, 1.0, 0.0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1848 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1849 Cairo.cairo_pattern_add_color_stop_rgba (pattern, 0, fromRGB.red / 255f, fromRGB.green / 255f, fromRGB.blue / 255f, data.alpha / 255f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1850 Cairo.cairo_pattern_add_color_stop_rgba (pattern, 1, toRGB.red / 255f, toRGB.green / 255f, toRGB.blue / 255f, data.alpha / 255f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1851 Cairo.cairo_save(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1852 Cairo.cairo_translate(cairo, x, y); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1853 Cairo.cairo_scale(cairo, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1854 Cairo.cairo_rectangle(cairo, 0, 0, 1, 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1855 Cairo.cairo_set_source(cairo, pattern); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1856 Cairo.cairo_fill(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1857 Cairo.cairo_restore(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1858 Cairo.cairo_pattern_destroy(pattern); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1859 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1860 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1861 ImageData.fillGradientRectangle(this, data.device, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1862 x, y, width, height, vertical, fromRGB, toRGB, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1863 8, 8, 8); |
18 | 1864 } |
1865 | |
1866 /** | |
1867 * Fills the interior of an oval, within the specified | |
1868 * rectangular area, with the receiver's background | |
1869 * color. | |
1870 * | |
1871 * @param x the x coordinate of the upper left corner of the oval to be filled | |
1872 * @param y the y coordinate of the upper left corner of the oval to be filled | |
1873 * @param width the width of the oval to be filled | |
1874 * @param height the height of the oval to be filled | |
1875 * | |
71 | 1876 * @exception DWTException <ul> |
18 | 1877 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1878 * </ul> | |
1879 * | |
1880 * @see #drawOval | |
1881 */ | |
1882 public void fillOval(int x, int y, int width, int height) { | |
71 | 1883 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1884 checkGC(FILL); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1885 if (width < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1886 x = x + width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1887 width = -width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1888 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1889 if (height < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1890 y = y + height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1891 height = -height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1892 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1893 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1894 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1895 if (width is height) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1896 Cairo.cairo_arc_negative(cairo, x + width / 2f, y + height / 2f, width / 2f, 0, 2 * cast(float)Compatibility.PI); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1897 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1898 Cairo.cairo_save(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1899 Cairo.cairo_translate(cairo, x + width / 2f, y + height / 2f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1900 Cairo.cairo_scale(cairo, width / 2f, height / 2f); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1901 Cairo.cairo_arc_negative(cairo, 0, 0, 1, 0, 2 * cast(float)Compatibility.PI); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1902 Cairo.cairo_restore(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1903 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1904 Cairo.cairo_fill(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1905 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1906 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1907 OS.gdk_draw_arc(data.drawable, handle, 1, x, y, width, height, 0, 23040); |
18 | 1908 } |
1909 | |
1910 /** | |
1911 * Fills the path described by the parameter. | |
1912 * <p> | |
1913 * This operation requires the operating system's advanced | |
1914 * graphics subsystem which may not be available on some | |
1915 * platforms. | |
1916 * </p> | |
1917 * | |
1918 * @param path the path to fill | |
1919 * | |
1920 * @exception IllegalArgumentException <ul> | |
1921 * <li>ERROR_NULL_ARGUMENT - if the parameter is null</li> | |
1922 * <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li> | |
1923 * </ul> | |
71 | 1924 * @exception DWTException <ul> |
18 | 1925 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1926 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
1927 * </ul> | |
1928 * | |
1929 * @see Path | |
1930 * | |
1931 * @since 3.1 | |
1932 */ | |
1933 public void fillPath (Path path) { | |
71 | 1934 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
1935 if (path is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
1936 if (path.handle is null) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1937 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1938 checkGC(FILL); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1939 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1940 auto copy = Cairo.cairo_copy_path(path.handle); |
71 | 1941 if (copy is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1942 Cairo.cairo_append_path(cairo, copy); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1943 Cairo.cairo_path_destroy(copy); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1944 Cairo.cairo_fill(cairo); |
18 | 1945 } |
1946 | |
1947 /** | |
1948 * Fills the interior of the closed polygon which is defined by the | |
1949 * specified array of integer coordinates, using the receiver's | |
1950 * background color. The array contains alternating x and y values | |
1951 * which are considered to represent points which are the vertices of | |
1952 * the polygon. Lines are drawn between each consecutive pair, and | |
1953 * between the first pair and last pair in the array. | |
1954 * | |
1955 * @param pointArray an array of alternating x and y values which are the vertices of the polygon | |
1956 * | |
1957 * @exception IllegalArgumentException <ul> | |
1958 * <li>ERROR_NULL_ARGUMENT if pointArray is null</li> | |
1959 * </ul> | |
71 | 1960 * @exception DWTException <ul> |
18 | 1961 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1962 * </ul> | |
1963 * | |
1964 * @see #drawPolygon | |
1965 */ | |
1966 public void fillPolygon(int[] pointArray) { | |
71 | 1967 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
1968 if (pointArray is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1969 checkGC(FILL); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1970 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1971 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1972 drawPolyline(cairo, pointArray, true); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1973 Cairo.cairo_fill(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1974 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1975 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1976 OS.gdk_draw_polygon(data.drawable, handle, 1, cast(GdkPoint*)pointArray.ptr, pointArray.length / 2); |
18 | 1977 } |
1978 | |
1979 /** | |
1980 * Fills the interior of the rectangle specified by the arguments, | |
1981 * using the receiver's background color. | |
1982 * | |
1983 * @param x the x coordinate of the rectangle to be filled | |
1984 * @param y the y coordinate of the rectangle to be filled | |
1985 * @param width the width of the rectangle to be filled | |
1986 * @param height the height of the rectangle to be filled | |
1987 * | |
71 | 1988 * @exception DWTException <ul> |
18 | 1989 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
1990 * </ul> | |
1991 * | |
1992 * @see #drawRectangle(int, int, int, int) | |
1993 */ | |
1994 public void fillRectangle(int x, int y, int width, int height) { | |
71 | 1995 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1996 checkGC(FILL); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1997 if (width < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1998 x = x + width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
1999 width = -width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2000 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2001 if (height < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2002 y = y + height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2003 height = -height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2004 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2005 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2006 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2007 Cairo.cairo_rectangle(cairo, x, y, width, height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2008 Cairo.cairo_fill(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2009 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2010 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2011 OS.gdk_draw_rectangle(data.drawable, handle, 1, x, y, width, height); |
18 | 2012 } |
2013 | |
2014 /** | |
2015 * Fills the interior of the specified rectangle, using the receiver's | |
2016 * background color. | |
2017 * | |
2018 * @param rect the rectangle to be filled | |
2019 * | |
2020 * @exception IllegalArgumentException <ul> | |
2021 * <li>ERROR_NULL_ARGUMENT - if the rectangle is null</li> | |
2022 * </ul> | |
71 | 2023 * @exception DWTException <ul> |
18 | 2024 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2025 * </ul> | |
2026 * | |
2027 * @see #drawRectangle(int, int, int, int) | |
2028 */ | |
2029 public void fillRectangle(Rectangle rect) { | |
71 | 2030 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
2031 if (rect is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2032 fillRectangle(rect.x, rect.y, rect.width, rect.height); |
18 | 2033 } |
2034 | |
2035 /** | |
2036 * Fills the interior of the round-cornered rectangle specified by | |
2037 * the arguments, using the receiver's background color. | |
2038 * | |
2039 * @param x the x coordinate of the rectangle to be filled | |
2040 * @param y the y coordinate of the rectangle to be filled | |
2041 * @param width the width of the rectangle to be filled | |
2042 * @param height the height of the rectangle to be filled | |
2043 * @param arcWidth the width of the arc | |
2044 * @param arcHeight the height of the arc | |
2045 * | |
71 | 2046 * @exception DWTException <ul> |
18 | 2047 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2048 * </ul> | |
2049 * | |
2050 * @see #drawRoundRectangle | |
2051 */ | |
2052 public void fillRoundRectangle(int x, int y, int width, int height, int arcWidth, int arcHeight) { | |
71 | 2053 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2054 checkGC(FILL); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2055 int nx = x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2056 int ny = y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2057 int nw = width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2058 int nh = height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2059 int naw = arcWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2060 int nah = arcHeight; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2061 if (nw < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2062 nw = 0 - nw; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2063 nx = nx - nw; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2064 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2065 if (nh < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2066 nh = 0 - nh; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2067 ny = ny -nh; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2068 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2069 if (naw < 0) naw = 0 - naw; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2070 if (nah < 0) nah = 0 - nah; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2071 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2072 if (cairo !is null) { |
240 | 2073 if (naw is 0 || nah is 0) { |
2074 Cairo.cairo_rectangle(cairo, x, y, width, height); | |
2075 } else { | |
2076 float naw2 = naw / 2f; | |
2077 float nah2 = nah / 2f; | |
2078 float fw = nw / naw2; | |
2079 float fh = nh / nah2; | |
2080 Cairo.cairo_save(cairo); | |
2081 Cairo.cairo_translate(cairo, nx, ny); | |
2082 Cairo.cairo_scale(cairo, naw2, nah2); | |
2083 Cairo.cairo_move_to(cairo, fw - 1, 0); | |
2084 Cairo.cairo_arc(cairo, fw - 1, 1, 1, Compatibility.PI + Compatibility.PI/2.0, Compatibility.PI*2.0); | |
2085 Cairo.cairo_arc(cairo, fw - 1, fh - 1, 1, 0, Compatibility.PI/2.0); | |
2086 Cairo.cairo_arc(cairo, 1, fh - 1, 1, Compatibility.PI/2, Compatibility.PI); | |
2087 Cairo.cairo_arc(cairo, 1, 1, 1, Compatibility.PI, 270.0*Compatibility.PI/180.0); | |
2088 Cairo.cairo_close_path(cairo); | |
2089 Cairo.cairo_restore(cairo); | |
2090 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2091 Cairo.cairo_fill(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2092 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2093 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2094 int naw2 = naw / 2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2095 int nah2 = nah / 2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2096 auto drawable = data.drawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2097 if (nw > naw) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2098 if (nh > nah) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2099 OS.gdk_draw_arc(drawable, handle, 1, nx, ny, naw, nah, 5760, 5760); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2100 OS.gdk_draw_rectangle(drawable, handle, 1, nx + naw2, ny, nw - naw2 * 2, nh); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2101 OS.gdk_draw_arc(drawable, handle, 1, nx + nw - naw, ny, naw, nah, 0, 5760); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2102 OS.gdk_draw_rectangle(drawable, handle, 1, nx, ny + nah2, naw2, nh - nah2 * 2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2103 OS.gdk_draw_arc(drawable, handle, 1, nx + nw - naw, ny + nh - nah, naw, nah, 17280, 5760); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2104 OS.gdk_draw_rectangle(drawable, handle, 1, nx + nw - naw2, ny + nah2, naw2, nh - nah2 * 2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2105 OS.gdk_draw_arc(drawable, handle, 1, nx, ny + nh - nah, naw, nah, 11520, 5760); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2106 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2107 OS.gdk_draw_arc(drawable, handle, 1, nx, ny, naw, nh, 5760, 11520); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2108 OS.gdk_draw_rectangle(drawable, handle, 1, nx + naw2, ny, nw - naw2 * 2, nh); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2109 OS.gdk_draw_arc(drawable, handle, 1, nx + nw - naw, ny, naw, nh, 17280, 11520); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2110 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2111 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2112 if (nh > nah) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2113 OS.gdk_draw_arc(drawable, handle, 1, nx, ny, nw, nah, 0, 11520); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2114 OS.gdk_draw_rectangle(drawable, handle, 1, nx, ny + nah2, nw, nh - nah2 * 2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2115 OS.gdk_draw_arc(drawable, handle, 1, nx, ny + nh - nah, nw, nah, 11520, 11520); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2116 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2117 OS.gdk_draw_arc(drawable, handle, 1, nx, ny, nw, nh, 0, 23040); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2118 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2119 } |
18 | 2120 } |
2121 | |
2122 int fixMnemonic (char [] buffer) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2123 int i=0, j=0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2124 int mnemonic=-1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2125 while (i < buffer.length) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2126 if ((buffer [j++] = buffer [i++]) is '&') { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2127 if (i is buffer.length) {continue;} |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2128 if (buffer [i] is '&') {i++; continue;} |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2129 if (mnemonic is -1) mnemonic = j; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2130 j--; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2131 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2132 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2133 while (j < buffer.length) buffer [j++] = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2134 return mnemonic; |
18 | 2135 } |
2136 | |
2137 /** | |
2138 * Returns the <em>advance width</em> of the specified character in | |
2139 * the font which is currently selected into the receiver. | |
2140 * <p> | |
2141 * The advance width is defined as the horizontal distance the cursor | |
2142 * should move after printing the character in the selected font. | |
2143 * </p> | |
2144 * | |
2145 * @param ch the character to measure | |
2146 * @return the distance in the x direction to move past the character before painting the next | |
2147 * | |
71 | 2148 * @exception DWTException <ul> |
18 | 2149 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2150 * </ul> | |
2151 */ | |
2152 public int getAdvanceWidth(char ch) { | |
71 | 2153 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2154 //BOGUS |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2155 return stringExtent([ch]).x; |
18 | 2156 } |
2157 | |
2158 /** | |
2159 * Returns <code>true</code> if receiver is using the operating system's | |
2160 * advanced graphics subsystem. Otherwise, <code>false</code> is returned | |
2161 * to indicate that normal graphics are in use. | |
2162 * <p> | |
2163 * Advanced graphics may not be installed for the operating system. In this | |
2164 * case, <code>false</code> is always returned. Some operating system have | |
2165 * only one graphics subsystem. If this subsystem supports advanced graphics, | |
2166 * then <code>true</code> is always returned. If any graphics operation such | |
2167 * as alpha, antialias, patterns, interpolation, paths, clipping or transformation | |
2168 * has caused the receiver to switch from regular to advanced graphics mode, | |
2169 * <code>true</code> is returned. If the receiver has been explicitly switched | |
2170 * to advanced mode and this mode is supported, <code>true</code> is returned. | |
2171 * </p> | |
2172 * | |
2173 * @return the advanced value | |
2174 * | |
71 | 2175 * @exception DWTException <ul> |
18 | 2176 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2177 * </ul> | |
2178 * | |
2179 * @see #setAdvanced | |
2180 * | |
2181 * @since 3.1 | |
2182 */ | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
2183 public bool getAdvanced() { |
71 | 2184 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2185 return data.cairo !is null; |
18 | 2186 } |
2187 | |
2188 /** | |
2189 * Returns the receiver's alpha value. | |
2190 * | |
2191 * @return the alpha value | |
2192 * | |
71 | 2193 * @exception DWTException <ul> |
18 | 2194 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2195 * </ul> | |
2196 * | |
2197 * @since 3.1 | |
2198 */ | |
2199 public int getAlpha() { | |
71 | 2200 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2201 return data.alpha; |
18 | 2202 } |
2203 | |
2204 /** | |
2205 * Returns the receiver's anti-aliasing setting value, which will be | |
71 | 2206 * one of <code>DWT.DEFAULT</code>, <code>DWT.OFF</code> or |
2207 * <code>DWT.ON</code>. Note that this controls anti-aliasing for all | |
18 | 2208 * <em>non-text drawing</em> operations. |
2209 * | |
2210 * @return the anti-aliasing setting | |
2211 * | |
71 | 2212 * @exception DWTException <ul> |
18 | 2213 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2214 * </ul> | |
2215 * | |
2216 * @see #getTextAntialias | |
2217 * | |
2218 * @since 3.1 | |
2219 */ | |
2220 public int getAntialias() { | |
71 | 2221 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
2222 if (data.cairo is null) return DWT.DEFAULT; | |
18 | 2223 int antialias = Cairo.cairo_get_antialias(data.cairo); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2224 switch (antialias) { |
71 | 2225 case Cairo.CAIRO_ANTIALIAS_DEFAULT: return DWT.DEFAULT; |
2226 case Cairo.CAIRO_ANTIALIAS_NONE: return DWT.OFF; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2227 case Cairo.CAIRO_ANTIALIAS_GRAY: |
71 | 2228 case Cairo.CAIRO_ANTIALIAS_SUBPIXEL: return DWT.ON; |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
2229 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2230 } |
71 | 2231 return DWT.DEFAULT; |
18 | 2232 } |
2233 | |
2234 /** | |
2235 * Returns the background color. | |
2236 * | |
2237 * @return the receiver's background color | |
2238 * | |
71 | 2239 * @exception DWTException <ul> |
18 | 2240 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2241 * </ul> | |
2242 */ | |
2243 public Color getBackground() { | |
71 | 2244 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2245 return Color.gtk_new(data.device, data.background); |
18 | 2246 } |
2247 | |
2248 /** | |
2249 * Returns the background pattern. The default value is | |
2250 * <code>null</code>. | |
2251 * | |
2252 * @return the receiver's background pattern | |
2253 * | |
71 | 2254 * @exception DWTException <ul> |
18 | 2255 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2256 * </ul> | |
2257 * | |
2258 * @see Pattern | |
2259 * | |
2260 * @since 3.1 | |
2261 */ | |
2262 public Pattern getBackgroundPattern() { | |
71 | 2263 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2264 return data.backgroundPattern; |
18 | 2265 } |
2266 | |
2267 /** | |
2268 * Returns the width of the specified character in the font | |
2269 * selected into the receiver. | |
2270 * <p> | |
2271 * The width is defined as the space taken up by the actual | |
2272 * character, not including the leading and tailing whitespace | |
2273 * or overhang. | |
2274 * </p> | |
2275 * | |
2276 * @param ch the character to measure | |
2277 * @return the width of the character | |
2278 * | |
71 | 2279 * @exception DWTException <ul> |
18 | 2280 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2281 * </ul> | |
2282 */ | |
2283 public int getCharWidth(char ch) { | |
71 | 2284 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2285 //BOGUS |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2286 return stringExtent([ch]).x; |
18 | 2287 } |
2288 | |
2289 /** | |
2290 * Returns the bounding rectangle of the receiver's clipping | |
2291 * region. If no clipping region is set, the return value | |
2292 * will be a rectangle which covers the entire bounds of the | |
2293 * object the receiver is drawing on. | |
2294 * | |
2295 * @return the bounding rectangle of the clipping region | |
2296 * | |
71 | 2297 * @exception DWTException <ul> |
18 | 2298 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2299 * </ul> | |
2300 */ | |
2301 public Rectangle getClipping() { | |
71 | 2302 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2303 /* Calculate visible bounds in device space */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2304 int x = 0, y = 0, width = 0, height = 0; |
240 | 2305 if (data.width !is -1 && data.height !is -1) { |
2306 width = data.width; | |
2307 height = data.height; | |
2308 } else { | |
2309 int w, h; | |
2310 OS.gdk_drawable_get_size(data.drawable, &w, &h); | |
2311 width = w; | |
2312 height = h; | |
2313 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2314 /* Intersect visible bounds with clipping in device space and then convert then to user space */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2315 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2316 auto clipRgn = data.clipRgn; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2317 auto damageRgn = data.damageRgn; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2318 if (clipRgn !is null || damageRgn !is null || cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2319 auto rgn = OS.gdk_region_new(); |
202 | 2320 GdkRectangle rect; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2321 rect.width = width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2322 rect.height = height; |
202 | 2323 OS.gdk_region_union_with_rect(rgn, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2324 if (damageRgn !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2325 OS.gdk_region_intersect (rgn, damageRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2326 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2327 /* Intersect visible bounds with clipping */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2328 if (clipRgn !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2329 /* Convert clipping to device space if needed */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2330 if (data.clippingTransform !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2331 clipRgn = convertRgn(clipRgn, data.clippingTransform); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2332 OS.gdk_region_intersect(rgn, clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2333 OS.gdk_region_destroy(clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2334 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2335 OS.gdk_region_intersect(rgn, clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2336 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2337 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2338 /* Convert to user space */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2339 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2340 double[] matrix = new double[6]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2341 Cairo.cairo_get_matrix(cairo, cast(cairo_matrix_t*)matrix.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2342 Cairo.cairo_matrix_invert(cast(cairo_matrix_t*)matrix.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2343 clipRgn = convertRgn(rgn, matrix); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2344 OS.gdk_region_destroy(rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2345 rgn = clipRgn; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2346 } |
202 | 2347 OS.gdk_region_get_clipbox(rgn, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2348 OS.gdk_region_destroy(rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2349 x = rect.x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2350 y = rect.y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2351 width = rect.width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2352 height = rect.height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2353 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2354 return new Rectangle(x, y, width, height); |
18 | 2355 } |
2356 | |
2357 /** | |
2358 * Sets the region managed by the argument to the current | |
2359 * clipping region of the receiver. | |
2360 * | |
2361 * @param region the region to fill with the clipping region | |
2362 * | |
2363 * @exception IllegalArgumentException <ul> | |
2364 * <li>ERROR_NULL_ARGUMENT - if the region is null</li> | |
2365 * <li>ERROR_INVALID_ARGUMENT - if the region is disposed</li> | |
2366 * </ul> | |
71 | 2367 * @exception DWTException <ul> |
18 | 2368 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2369 * </ul> | |
2370 */ | |
2371 public void getClipping(Region region) { | |
71 | 2372 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
2373 if (region is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
2374 if (region.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2375 auto clipping = region.handle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2376 OS.gdk_region_subtract(clipping, clipping); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2377 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2378 auto clipRgn = data.clipRgn; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2379 if (clipRgn is null) { |
202 | 2380 GdkRectangle rect; |
240 | 2381 if (data.width !is -1 && data.height !is -1) { |
2382 rect.width = data.width; | |
2383 rect.height = data.height; | |
2384 } else { | |
2385 int width, height; | |
2386 OS.gdk_drawable_get_size(data.drawable, &width, &height); | |
2387 rect.width = width; | |
2388 rect.height = height; | |
2389 } | |
202 | 2390 OS.gdk_region_union_with_rect(clipping, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2391 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2392 /* Convert clipping to device space if needed */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2393 if (data.clippingTransform !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2394 auto rgn = convertRgn(clipRgn, data.clippingTransform); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2395 OS.gdk_region_union(clipping, rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2396 OS.gdk_region_destroy(rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2397 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2398 OS.gdk_region_union(clipping, clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2399 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2400 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2401 if (data.damageRgn !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2402 OS.gdk_region_intersect(clipping, data.damageRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2403 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2404 /* Convert to user space */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2405 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2406 double[] matrix = new double[6]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2407 Cairo.cairo_get_matrix(cairo, cast(cairo_matrix_t*)matrix.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2408 Cairo.cairo_matrix_invert(cast(cairo_matrix_t*)matrix.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2409 auto rgn = convertRgn(clipping, matrix); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2410 OS.gdk_region_subtract(clipping, clipping); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2411 OS.gdk_region_union(clipping, rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2412 OS.gdk_region_destroy(rgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2413 } |
18 | 2414 } |
2415 | |
2416 /** | |
2417 * Returns the receiver's fill rule, which will be one of | |
71 | 2418 * <code>DWT.FILL_EVEN_ODD</code> or <code>DWT.FILL_WINDING</code>. |
18 | 2419 * |
2420 * @return the receiver's fill rule | |
2421 * | |
71 | 2422 * @exception DWTException <ul> |
18 | 2423 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2424 * </ul> | |
2425 * | |
2426 * @since 3.1 | |
2427 */ | |
2428 public int getFillRule() { | |
71 | 2429 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2430 auto cairo = data.cairo; |
71 | 2431 if (cairo is null) return DWT.FILL_EVEN_ODD; |
2432 return Cairo.cairo_get_fill_rule(cairo) is Cairo.CAIRO_FILL_RULE_WINDING ? DWT.FILL_WINDING : DWT.FILL_EVEN_ODD; | |
18 | 2433 } |
2434 | |
2435 /** | |
2436 * Returns the font currently being used by the receiver | |
2437 * to draw and measure text. | |
2438 * | |
2439 * @return the receiver's font | |
2440 * | |
71 | 2441 * @exception DWTException <ul> |
18 | 2442 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2443 * </ul> | |
2444 */ | |
2445 public Font getFont() { | |
71 | 2446 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
240 | 2447 return data.font; |
18 | 2448 } |
2449 | |
2450 /** | |
2451 * Returns a FontMetrics which contains information | |
2452 * about the font currently being used by the receiver | |
2453 * to draw and measure text. | |
2454 * | |
2455 * @return font metrics for the receiver's font | |
2456 * | |
71 | 2457 * @exception DWTException <ul> |
18 | 2458 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2459 * </ul> | |
2460 */ | |
2461 public FontMetrics getFontMetrics() { | |
71 | 2462 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2463 if (data.context is null) createLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2464 checkGC(FONT); |
240 | 2465 Font font = data.font; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2466 auto context = data.context; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2467 auto lang = OS.pango_context_get_language(context); |
240 | 2468 auto metrics = OS.pango_context_get_metrics(context, font.handle, lang); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2469 FontMetrics fm = new FontMetrics(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2470 fm.ascent = OS.PANGO_PIXELS(OS.pango_font_metrics_get_ascent(metrics)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2471 fm.descent = OS.PANGO_PIXELS(OS.pango_font_metrics_get_descent(metrics)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2472 fm.averageCharWidth = OS.PANGO_PIXELS(OS.pango_font_metrics_get_approximate_char_width(metrics)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2473 fm.height = fm.ascent + fm.descent; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2474 OS.pango_font_metrics_unref(metrics); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2475 return fm; |
18 | 2476 } |
2477 | |
2478 /** | |
2479 * Returns the receiver's foreground color. | |
2480 * | |
2481 * @return the color used for drawing foreground things | |
2482 * | |
71 | 2483 * @exception DWTException <ul> |
18 | 2484 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2485 * </ul> | |
2486 */ | |
2487 public Color getForeground() { | |
71 | 2488 if (handle is null) DWT.error(DWT.ERROR_WIDGET_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2489 return Color.gtk_new(data.device, data.foreground); |
18 | 2490 } |
2491 | |
2492 /** | |
2493 * Returns the foreground pattern. The default value is | |
2494 * <code>null</code>. | |
2495 * | |
2496 * @return the receiver's foreground pattern | |
2497 * | |
71 | 2498 * @exception DWTException <ul> |
18 | 2499 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2500 * </ul> | |
2501 * | |
2502 * @see Pattern | |
2503 * | |
2504 * @since 3.1 | |
2505 */ | |
2506 public Pattern getForegroundPattern() { | |
71 | 2507 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2508 return data.foregroundPattern; |
18 | 2509 } |
2510 | |
2511 /** | |
2512 * Returns the GCData. | |
2513 * <p> | |
2514 * <b>IMPORTANT:</b> This method is <em>not</em> part of the public | |
2515 * API for <code>GC</code>. It is marked public only so that it | |
71 | 2516 * can be shared within the packages provided by DWT. It is not |
18 | 2517 * available on all platforms, and should never be called from |
2518 * application code. | |
2519 * </p> | |
2520 * | |
2521 * @return the receiver's GCData | |
2522 * | |
71 | 2523 * @exception DWTException <ul> |
18 | 2524 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2525 * </ul> | |
2526 * | |
2527 * @see GCData | |
2528 * | |
2529 * @since 3.2 | |
2530 */ | |
2531 public GCData getGCData() { | |
71 | 2532 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2533 return data; |
18 | 2534 } |
2535 | |
2536 /** | |
2537 * Returns the receiver's interpolation setting, which will be one of | |
71 | 2538 * <code>DWT.DEFAULT</code>, <code>DWT.NONE</code>, |
2539 * <code>DWT.LOW</code> or <code>DWT.HIGH</code>. | |
18 | 2540 * |
2541 * @return the receiver's interpolation setting | |
2542 * | |
71 | 2543 * @exception DWTException <ul> |
18 | 2544 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2545 * </ul> | |
2546 * | |
2547 * @since 3.1 | |
2548 */ | |
2549 public int getInterpolation() { | |
71 | 2550 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2551 return data.interpolation; |
18 | 2552 } |
2553 | |
2554 /** | |
2555 * Returns the receiver's line attributes. | |
2556 * | |
2557 * @return the line attributes used for drawing lines | |
2558 * | |
71 | 2559 * @exception DWTException <ul> |
18 | 2560 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2561 * </ul> | |
2562 * | |
2563 * @since 3.3 | |
2564 */ | |
2565 public LineAttributes getLineAttributes() { | |
71 | 2566 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2567 float[] dashes = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2568 if (data.lineDashes !is null) { |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
2569 dashes = new float[data.lineDashes.length]; |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
2570 System.arraycopy(data.lineDashes, 0, dashes, 0, dashes.length); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2571 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2572 return new LineAttributes(data.lineWidth, data.lineCap, data.lineJoin, data.lineStyle, dashes, data.lineDashesOffset, data.lineMiterLimit); |
18 | 2573 } |
2574 | |
2575 /** | |
2576 * Returns the receiver's line cap style, which will be one | |
71 | 2577 * of the constants <code>DWT.CAP_FLAT</code>, <code>DWT.CAP_ROUND</code>, |
2578 * or <code>DWT.CAP_SQUARE</code>. | |
18 | 2579 * |
2580 * @return the cap style used for drawing lines | |
2581 * | |
71 | 2582 * @exception DWTException <ul> |
18 | 2583 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2584 * </ul> | |
2585 * | |
2586 * @since 3.1 | |
2587 */ | |
2588 public int getLineCap() { | |
71 | 2589 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2590 return data.lineCap; |
18 | 2591 } |
2592 | |
2593 /** | |
2594 * Returns the receiver's line dash style. The default value is | |
2595 * <code>null</code>. | |
2596 * | |
2597 * @return the line dash style used for drawing lines | |
2598 * | |
71 | 2599 * @exception DWTException <ul> |
18 | 2600 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2601 * </ul> | |
2602 * | |
2603 * @since 3.1 | |
2604 */ | |
2605 public int[] getLineDash() { | |
71 | 2606 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2607 if (data.lineDashes is null) return null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2608 int[] lineDashes = new int[data.lineDashes.length]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2609 for (int i = 0; i < lineDashes.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2610 lineDashes[i] = cast(int)data.lineDashes[i]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2611 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2612 return lineDashes; |
18 | 2613 } |
2614 | |
2615 /** | |
2616 * Returns the receiver's line join style, which will be one | |
71 | 2617 * of the constants <code>DWT.JOIN_MITER</code>, <code>DWT.JOIN_ROUND</code>, |
2618 * or <code>DWT.JOIN_BEVEL</code>. | |
18 | 2619 * |
2620 * @return the join style used for drawing lines | |
2621 * | |
71 | 2622 * @exception DWTException <ul> |
18 | 2623 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2624 * </ul> | |
2625 * | |
2626 * @since 3.1 | |
2627 */ | |
2628 public int getLineJoin() { | |
71 | 2629 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2630 return data.lineJoin; |
18 | 2631 } |
2632 | |
2633 /** | |
2634 * Returns the receiver's line style, which will be one | |
71 | 2635 * of the constants <code>DWT.LINE_SOLID</code>, <code>DWT.LINE_DASH</code>, |
2636 * <code>DWT.LINE_DOT</code>, <code>DWT.LINE_DASHDOT</code> or | |
2637 * <code>DWT.LINE_DASHDOTDOT</code>. | |
18 | 2638 * |
2639 * @return the style used for drawing lines | |
2640 * | |
71 | 2641 * @exception DWTException <ul> |
18 | 2642 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2643 * </ul> | |
2644 */ | |
2645 public int getLineStyle() { | |
71 | 2646 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2647 return data.lineStyle; |
18 | 2648 } |
2649 | |
2650 /** | |
2651 * Returns the width that will be used when drawing lines | |
2652 * for all of the figure drawing operations (that is, | |
2653 * <code>drawLine</code>, <code>drawRectangle</code>, | |
2654 * <code>drawPolyline</code>, and so forth. | |
2655 * | |
2656 * @return the receiver's line width | |
2657 * | |
71 | 2658 * @exception DWTException <ul> |
18 | 2659 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2660 * </ul> | |
2661 */ | |
2662 public int getLineWidth() { | |
71 | 2663 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2664 return cast(int)data.lineWidth; |
18 | 2665 } |
2666 | |
2667 /** | |
2668 * Returns the receiver's style information. | |
2669 * <p> | |
2670 * Note that the value which is returned by this method <em>may | |
2671 * not match</em> the value which was provided to the constructor | |
2672 * when the receiver was created. This can occur when the underlying | |
2673 * operating system does not support a particular combination of | |
2674 * requested styles. | |
2675 * </p> | |
2676 * | |
2677 * @return the style bits | |
2678 * | |
71 | 2679 * @exception DWTException <ul> |
18 | 2680 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2681 * </ul> | |
2682 * | |
2683 * @since 2.1.2 | |
2684 */ | |
2685 public int getStyle () { | |
71 | 2686 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2687 return data.style; |
18 | 2688 } |
2689 | |
2690 /** | |
2691 * Returns the receiver's text drawing anti-aliasing setting value, | |
71 | 2692 * which will be one of <code>DWT.DEFAULT</code>, <code>DWT.OFF</code> or |
2693 * <code>DWT.ON</code>. Note that this controls anti-aliasing | |
18 | 2694 * <em>only</em> for text drawing operations. |
2695 * | |
2696 * @return the anti-aliasing setting | |
2697 * | |
71 | 2698 * @exception DWTException <ul> |
18 | 2699 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2700 * </ul> | |
2701 * | |
2702 * @see #getAntialias | |
2703 * | |
2704 * @since 3.1 | |
2705 */ | |
2706 public int getTextAntialias() { | |
71 | 2707 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
2708 if (data.cairo is null) return DWT.DEFAULT; | |
18 | 2709 int antialias = Cairo.CAIRO_ANTIALIAS_DEFAULT; |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
2710 if (OS.GTK_VERSION < OS.buildVERSION(2, 8, 0)) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2711 auto options = Cairo.cairo_font_options_create(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2712 Cairo.cairo_get_font_options(data.cairo, options); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2713 antialias = Cairo.cairo_font_options_get_antialias(options); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2714 Cairo.cairo_font_options_destroy(options); |
18 | 2715 } else { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2716 if (data.context !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2717 auto options = OS.pango_cairo_context_get_font_options(data.context); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2718 if (options !is null) antialias = Cairo.cairo_font_options_get_antialias(options); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2719 } |
18 | 2720 } |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2721 switch (antialias) { |
71 | 2722 case Cairo.CAIRO_ANTIALIAS_DEFAULT: return DWT.DEFAULT; |
2723 case Cairo.CAIRO_ANTIALIAS_NONE: return DWT.OFF; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2724 case Cairo.CAIRO_ANTIALIAS_GRAY: |
71 | 2725 case Cairo.CAIRO_ANTIALIAS_SUBPIXEL: return DWT.ON; |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
33
diff
changeset
|
2726 default: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2727 } |
71 | 2728 return DWT.DEFAULT; |
18 | 2729 } |
2730 | |
2731 /** | |
2732 * Sets the parameter to the transform that is currently being | |
2733 * used by the receiver. | |
2734 * | |
2735 * @param transform the destination to copy the transform into | |
2736 * | |
2737 * @exception IllegalArgumentException <ul> | |
2738 * <li>ERROR_NULL_ARGUMENT - if the parameter is null</li> | |
2739 * <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li> | |
2740 * </ul> | |
71 | 2741 * @exception DWTException <ul> |
18 | 2742 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2743 * </ul> | |
2744 * | |
2745 * @see Transform | |
2746 * | |
2747 * @since 3.1 | |
2748 */ | |
2749 public void getTransform(Transform transform) { | |
71 | 2750 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
2751 if (transform is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
2752 if (transform.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2753 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2754 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2755 Cairo.cairo_get_matrix(cairo, cast(cairo_matrix_t*)transform.handle.ptr); |
240 | 2756 double[] identity = identity(); |
2757 Cairo.cairo_matrix_invert(cast(cairo_matrix_t*)identity.ptr); | |
2758 Cairo.cairo_matrix_multiply(cast(cairo_matrix_t*)transform.handle.ptr, cast(cairo_matrix_t*)transform.handle.ptr, cast(cairo_matrix_t*)identity.ptr); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2759 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2760 transform.setElements(1, 0, 0, 1, 0, 0); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2761 } |
18 | 2762 } |
2763 | |
2764 /** | |
2765 * Returns <code>true</code> if this GC is drawing in the mode | |
2766 * where the resulting color in the destination is the | |
2767 * <em>exclusive or</em> of the color values in the source | |
2768 * and the destination, and <code>false</code> if it is | |
2769 * drawing in the mode where the destination color is being | |
2770 * replaced with the source color value. | |
2771 * | |
2772 * @return <code>true</code> true if the receiver is in XOR mode, and false otherwise | |
2773 * | |
71 | 2774 * @exception DWTException <ul> |
18 | 2775 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2776 * </ul> | |
2777 */ | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
2778 public bool getXORMode() { |
71 | 2779 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2780 return data.xorMode; |
18 | 2781 } |
2782 | |
2783 /** | |
2784 * Returns an integer hash code for the receiver. Any two | |
2785 * objects that return <code>true</code> when passed to | |
2786 * <code>equals</code> must return the same value for this | |
2787 * method. | |
2788 * | |
2789 * @return the receiver's hash | |
2790 * | |
71 | 2791 * @exception DWTException <ul> |
18 | 2792 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2793 * </ul> | |
2794 * | |
2795 * @see #equals | |
2796 */ | |
150
f2e04420fd6c
reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents:
72
diff
changeset
|
2797 public override hash_t toHash() { |
f2e04420fd6c
reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents:
72
diff
changeset
|
2798 return cast(hash_t)/*64*/handle; |
18 | 2799 } |
2800 | |
240 | 2801 double[] identity() { |
2802 double[] identity = new double[6]; | |
2803 if ((data.style & DWT.MIRRORED) !is 0) { | |
2804 int w, h; | |
2805 OS.gdk_drawable_get_size(data.drawable, &w, &h); | |
2806 Cairo.cairo_matrix_init(cast(cairo_matrix_t*)identity.ptr, -1, 0, 0, 1, w, 0); | |
2807 } else { | |
2808 Cairo.cairo_matrix_init_identity(cast(cairo_matrix_t*)identity.ptr); | |
2809 } | |
2810 return identity; | |
2811 } | |
2812 | |
2813 void init_(Drawable drawable, GCData data, GdkGC* gdkGC) { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2814 if (data.foreground !is null) data.state &= ~FOREGROUND; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2815 if (data.background !is null) data.state &= ~(BACKGROUND | BACKGROUND_BG); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2816 if (data.font !is null) data.state &= ~FONT; |
18 | 2817 |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2818 Image image = data.image; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2819 if (image !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2820 image.memGC = this; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2821 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2822 * The transparent pixel mask might change when drawing on |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2823 * the image. Destroy it so that it is regenerated when |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2824 * necessary. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2825 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2826 if (image.transparentPixel !is -1) image.destroyMask(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2827 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2828 this.drawable = drawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2829 this.data = data; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2830 handle = gdkGC; |
240 | 2831 if ((data.style & DWT.MIRRORED) !is 0) { |
2832 initCairo(); | |
2833 auto cairo = data.cairo; | |
2834 Cairo.cairo_set_matrix(cairo, cast(cairo_matrix_t*) identity().ptr); | |
2835 } | |
18 | 2836 } |
2837 | |
2838 void initCairo() { | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2839 data.device.checkCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2840 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2841 if (cairo !is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2842 auto xDisplay = OS.GDK_DISPLAY(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2843 auto xVisual = OS.gdk_x11_visual_get_xvisual(OS.gdk_visual_get_system()); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2844 uint xDrawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2845 int translateX = 0, translateY = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2846 auto drawable = data.drawable; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2847 if (data.image !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2848 xDrawable = OS.GDK_PIXMAP_XID(drawable); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2849 } else { |
240 | 2850 if (!data.realDrawable) { |
2851 int x, y; | |
2852 GdkDrawable* real_drawable; | |
2853 OS.gdk_window_get_internal_paint_info(cast(GdkWindow*)drawable, &real_drawable, &x, &y); | |
2854 xDrawable = OS.gdk_x11_drawable_get_xid(real_drawable); | |
2855 translateX = -x; | |
2856 translateY = -y; | |
2857 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2858 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2859 int w, h; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2860 OS.gdk_drawable_get_size(drawable, &w, &h); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2861 int width = w, height = h; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2862 auto surface = Cairo.cairo_xlib_surface_create(cast(void*)xDisplay, xDrawable, xVisual, width, height); |
71 | 2863 if (surface is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2864 Cairo.cairo_surface_set_device_offset(surface, translateX, translateY); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2865 data.cairo = cairo = Cairo.cairo_create(surface); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2866 Cairo.cairo_surface_destroy(surface); |
71 | 2867 if (cairo is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2868 data.disposeCairo = true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2869 Cairo.cairo_set_fill_rule(cairo, Cairo.CAIRO_FILL_RULE_EVEN_ODD); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2870 data.state &= ~(BACKGROUND | FOREGROUND | FONT | LINE_WIDTH | LINE_CAP | LINE_JOIN | LINE_STYLE | DRAW_OFFSET); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2871 setCairoClip(cairo, data.clipRgn); |
18 | 2872 } |
2873 | |
2874 /** | |
2875 * Returns <code>true</code> if the receiver has a clipping | |
2876 * region set into it, and <code>false</code> otherwise. | |
2877 * If this method returns false, the receiver will draw on all | |
2878 * available space in the destination. If it returns true, | |
2879 * it will draw only in the area that is covered by the region | |
2880 * that can be accessed with <code>getClipping(region)</code>. | |
2881 * | |
2882 * @return <code>true</code> if the GC has a clipping region, and <code>false</code> otherwise | |
2883 * | |
71 | 2884 * @exception DWTException <ul> |
18 | 2885 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2886 * </ul> | |
2887 */ | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
2888 public bool isClipped() { |
71 | 2889 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2890 return data.clipRgn !is null; |
18 | 2891 } |
2892 | |
2893 /** | |
2894 * Returns <code>true</code> if the GC has been disposed, | |
2895 * and <code>false</code> otherwise. | |
2896 * <p> | |
2897 * This method gets the dispose state for the GC. | |
2898 * When a GC has been disposed, it is an error to | |
2899 * invoke any other method using the GC. | |
2900 * | |
2901 * @return <code>true</code> when the GC is disposed and <code>false</code> otherwise | |
2902 */ | |
150
f2e04420fd6c
reworked overrides and superclass aliases
Frank Benoit <benoit@tionex.de>
parents:
72
diff
changeset
|
2903 public override bool isDisposed() { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2904 return handle is null; |
18 | 2905 } |
2906 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
2907 bool isIdentity(double[] matrix) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2908 if (matrix is null) return true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2909 return matrix[0] is 1 && matrix[1] is 0 && matrix[2] is 0 && matrix[3] is 1 && matrix[4] is 0 && matrix[5] is 0; |
18 | 2910 } |
2911 | |
2912 /** | |
2913 * Sets the receiver to always use the operating system's advanced graphics | |
2914 * subsystem for all graphics operations if the argument is <code>true</code>. | |
2915 * If the argument is <code>false</code>, the advanced graphics subsystem is | |
2916 * no longer used, advanced graphics state is cleared and the normal graphics | |
2917 * subsystem is used from now on. | |
2918 * <p> | |
2919 * Normally, the advanced graphics subsystem is invoked automatically when | |
2920 * any one of the alpha, antialias, patterns, interpolation, paths, clipping | |
2921 * or transformation operations in the receiver is requested. When the receiver | |
2922 * is switched into advanced mode, the advanced graphics subsystem performs both | |
2923 * advanced and normal graphics operations. Because the two subsystems are | |
2924 * different, their output may differ. Switching to advanced graphics before | |
2925 * any graphics operations are performed ensures that the output is consistent. | |
2926 * </p><p> | |
2927 * Advanced graphics may not be installed for the operating system. In this | |
2928 * case, this operation does nothing. Some operating system have only one | |
2929 * graphics subsystem, so switching from normal to advanced graphics does | |
2930 * nothing. However, switching from advanced to normal graphics will always | |
2931 * clear the advanced graphics state, even for operating systems that have | |
2932 * only one graphics subsystem. | |
2933 * </p> | |
2934 * | |
2935 * @param advanced the new advanced graphics state | |
2936 * | |
71 | 2937 * @exception DWTException <ul> |
18 | 2938 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2939 * </ul> | |
2940 * | |
2941 * @see #setAlpha | |
2942 * @see #setAntialias | |
2943 * @see #setBackgroundPattern | |
2944 * @see #setClipping(Path) | |
2945 * @see #setForegroundPattern | |
2946 * @see #setLineAttributes | |
2947 * @see #setInterpolation | |
2948 * @see #setTextAntialias | |
2949 * @see #setTransform | |
2950 * @see #getAdvanced | |
2951 * | |
2952 * @since 3.1 | |
2953 */ | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
2954 public void setAdvanced(bool advanced) { |
71 | 2955 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
240 | 2956 if ((data.style & DWT.MIRRORED) !is 0) { |
2957 if (!advanced) { | |
2958 setAlpha(0xFF); | |
2959 setAntialias(DWT.DEFAULT); | |
2960 setBackgroundPattern(null); | |
2961 setClipping(cast(GdkRegion*)null); | |
2962 setForegroundPattern(null); | |
2963 setInterpolation(DWT.DEFAULT); | |
2964 setTextAntialias(DWT.DEFAULT); | |
2965 setTransform(null); | |
2966 } | |
2967 return; | |
2968 } | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2969 if (advanced && data.cairo !is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2970 if (advanced) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2971 try { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2972 initCairo(); |
71 | 2973 } catch (DWTException e) {} |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2974 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2975 if (!data.disposeCairo) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2976 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2977 if (cairo !is null) Cairo.cairo_destroy(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2978 data.cairo = null; |
71 | 2979 data.interpolation = DWT.DEFAULT; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2980 data.backgroundPattern = data.foregroundPattern = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2981 data.state = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2982 setClipping(cast(GdkRegion*)null); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
2983 } |
18 | 2984 } |
2985 | |
2986 /** | |
2987 * Sets the receiver's alpha value. | |
2988 * <p> | |
2989 * This operation requires the operating system's advanced | |
2990 * graphics subsystem which may not be available on some | |
2991 * platforms. | |
2992 * </p> | |
2993 * @param alpha the alpha value | |
2994 * | |
71 | 2995 * @exception DWTException <ul> |
18 | 2996 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
2997 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
2998 * </ul> | |
2999 * | |
3000 * @see #getAdvanced | |
3001 * @see #setAdvanced | |
3002 * | |
3003 * @since 3.1 | |
3004 */ | |
3005 public void setAlpha(int alpha) { | |
71 | 3006 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3007 if (data.cairo is null && (alpha & 0xff) is 0xff) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3008 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3009 data.alpha = alpha & 0xff; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3010 data.state &= ~(BACKGROUND | FOREGROUND | BACKGROUND_BG); |
18 | 3011 } |
3012 | |
3013 /** | |
3014 * Sets the receiver's anti-aliasing value to the parameter, | |
71 | 3015 * which must be one of <code>DWT.DEFAULT</code>, <code>DWT.OFF</code> |
3016 * or <code>DWT.ON</code>. Note that this controls anti-aliasing for all | |
18 | 3017 * <em>non-text drawing</em> operations. |
3018 * <p> | |
3019 * This operation requires the operating system's advanced | |
3020 * graphics subsystem which may not be available on some | |
3021 * platforms. | |
3022 * </p> | |
3023 * | |
3024 * @param antialias the anti-aliasing setting | |
3025 * | |
3026 * @exception IllegalArgumentException <ul> | |
71 | 3027 * <li>ERROR_INVALID_ARGUMENT - if the parameter is not one of <code>DWT.DEFAULT</code>, |
3028 * <code>DWT.OFF</code> or <code>DWT.ON</code></li> | |
18 | 3029 * </ul> |
71 | 3030 * @exception DWTException <ul> |
18 | 3031 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3032 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
3033 * </ul> | |
3034 * | |
3035 * @see #getAdvanced | |
3036 * @see #setAdvanced | |
3037 * @see #setTextAntialias | |
3038 * | |
3039 * @since 3.1 | |
3040 */ | |
3041 public void setAntialias(int antialias) { | |
71 | 3042 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3043 if (data.cairo is null && antialias is DWT.DEFAULT) return; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3044 int mode = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3045 switch (antialias) { |
71 | 3046 case DWT.DEFAULT: mode = Cairo.CAIRO_ANTIALIAS_DEFAULT; break; |
3047 case DWT.OFF: mode = Cairo.CAIRO_ANTIALIAS_NONE; break; | |
3048 case DWT.ON: mode = Cairo.CAIRO_ANTIALIAS_GRAY; | |
18 | 3049 break; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3050 default: |
71 | 3051 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3052 } |
18 | 3053 initCairo(); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3054 auto cairo = data.cairo; |
33
27324bbbac70
changed to regenerated BCD bindings
Frank Benoit <benoit@tionex.de>
parents:
28
diff
changeset
|
3055 Cairo.cairo_set_antialias(cairo, mode); |
18 | 3056 } |
3057 | |
3058 /** | |
3059 * Sets the background color. The background color is used | |
3060 * for fill operations and as the background color when text | |
3061 * is drawn. | |
3062 * | |
3063 * @param color the new background color for the receiver | |
3064 * | |
3065 * @exception IllegalArgumentException <ul> | |
3066 * <li>ERROR_NULL_ARGUMENT - if the color is null</li> | |
3067 * <li>ERROR_INVALID_ARGUMENT - if the color has been disposed</li> | |
3068 * </ul> | |
71 | 3069 * @exception DWTException <ul> |
18 | 3070 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3071 * </ul> | |
3072 */ | |
3073 public void setBackground(Color color) { | |
71 | 3074 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3075 if (color is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
3076 if (color.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3077 data.background = color.handle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3078 data.backgroundPattern = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3079 data.state &= ~(BACKGROUND | BACKGROUND_BG); |
18 | 3080 } |
3081 | |
3082 /** | |
3083 * Sets the background pattern. The default value is <code>null</code>. | |
3084 * <p> | |
3085 * This operation requires the operating system's advanced | |
3086 * graphics subsystem which may not be available on some | |
3087 * platforms. | |
3088 * </p> | |
3089 * | |
3090 * @param pattern the new background pattern | |
3091 * | |
3092 * @exception IllegalArgumentException <ul> | |
3093 * <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li> | |
3094 * </ul> | |
71 | 3095 * @exception DWTException <ul> |
18 | 3096 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3097 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
3098 * </ul> | |
3099 * | |
3100 * @see Pattern | |
3101 * @see #getAdvanced | |
3102 * @see #setAdvanced | |
3103 * | |
3104 * @since 3.1 | |
3105 */ | |
3106 public void setBackgroundPattern(Pattern pattern) { | |
71 | 3107 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3108 if (pattern !is null && pattern.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3109 if (data.cairo is null && pattern is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3110 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3111 if (data.backgroundPattern is pattern) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3112 data.backgroundPattern = pattern; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3113 data.state &= ~BACKGROUND; |
18 | 3114 } |
3115 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3116 static void setCairoFont(cairo_t* cairo, Font font) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3117 setCairoFont(cairo, font.handle); |
18 | 3118 } |
3119 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3120 static void setCairoFont(cairo_t* cairo, PangoFontDescription* font) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3121 auto family = OS.pango_font_description_get_family(font); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3122 int len = /*OS.*/strlen(family); |
238 | 3123 String buffer = new char[len + 1]; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3124 memmove(buffer.ptr, family, len); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3125 //TODO - convert font height from pango to cairo |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3126 double height = OS.PANGO_PIXELS(OS.pango_font_description_get_size(font)) * 96 / 72; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3127 int pangoStyle = OS.pango_font_description_get_style(font); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3128 int pangoWeight = OS.pango_font_description_get_weight(font); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3129 int slant = Cairo.CAIRO_FONT_SLANT_NORMAL; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3130 if (pangoStyle is OS.PANGO_STYLE_ITALIC) slant = Cairo.CAIRO_FONT_SLANT_ITALIC; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3131 if (pangoStyle is OS.PANGO_STYLE_OBLIQUE) slant = Cairo.CAIRO_FONT_SLANT_OBLIQUE; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3132 int weight = Cairo.CAIRO_FONT_WEIGHT_NORMAL; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3133 if (pangoWeight is OS.PANGO_WEIGHT_BOLD) weight = Cairo.CAIRO_FONT_WEIGHT_BOLD; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3134 Cairo.cairo_select_font_face(cairo, buffer.ptr, slant, weight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3135 Cairo.cairo_set_font_size(cairo, height); |
18 | 3136 } |
3137 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3138 static void setCairoClip(cairo_t* cairo, GdkRegion* clipRgn) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3139 Cairo.cairo_reset_clip(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3140 if (clipRgn is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3141 if (OS.GTK_VERSION >= OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3142 OS.gdk_cairo_region(cairo, clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3143 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3144 int nRects; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3145 GdkRectangle * rects; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3146 OS.gdk_region_get_rectangles(clipRgn, &rects, &nRects); |
202 | 3147 //GdkRectangle* rect = new GdkRectangle(); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3148 for (int i=0; i<nRects; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3149 Cairo.cairo_rectangle(cairo, rects[i].x, rects[i].y, rects[i].width, rects[i].height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3150 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3151 if (rects !is null) OS.g_free(rects); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3152 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3153 Cairo.cairo_clip(cairo); |
18 | 3154 } |
3155 | |
21 | 3156 static void setCairoPatternColor( cairo_pattern_t* pattern, int offset, Color c, int alpha) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3157 GdkColor* color = c.handle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3158 double aa = (alpha & 0xFF) / cast(double)0xFF; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3159 double red = ((color.red & 0xFFFF) / cast(double)0xFFFF); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3160 double green = ((color.green & 0xFFFF) / cast(double)0xFFFF); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3161 double blue = ((color.blue & 0xFFFF) / cast(double)0xFFFF); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3162 Cairo.cairo_pattern_add_color_stop_rgba(pattern, offset, red, green, blue, aa); |
18 | 3163 } |
3164 | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3165 void setClipping(GdkRegion* clipRgn) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3166 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3167 if (clipRgn is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3168 if (data.clipRgn !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3169 OS.gdk_region_destroy(data.clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3170 data.clipRgn = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3171 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3172 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3173 data.clippingTransform = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3174 setCairoClip(cairo, clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3175 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3176 auto clipping = data.damageRgn !is null ? data.damageRgn : null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3177 OS.gdk_gc_set_clip_region(handle, clipping); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3178 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3179 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3180 if (data.clipRgn is null) data.clipRgn = OS.gdk_region_new(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3181 OS.gdk_region_subtract(data.clipRgn, data.clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3182 OS.gdk_region_union(data.clipRgn, clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3183 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3184 if (data.clippingTransform is null) data.clippingTransform = new double[6]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3185 Cairo.cairo_get_matrix(cairo,cast(cairo_matrix_t *) data.clippingTransform.ptr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3186 setCairoClip(cairo, clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3187 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3188 auto clipping = clipRgn; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3189 if (data.damageRgn !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3190 clipping = OS.gdk_region_new(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3191 OS.gdk_region_union(clipping, clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3192 OS.gdk_region_intersect(clipping, data.damageRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3193 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3194 OS.gdk_gc_set_clip_region(handle, clipping); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3195 if (clipping !is clipRgn) OS.gdk_region_destroy(clipping); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3196 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3197 } |
18 | 3198 } |
3199 | |
3200 /** | |
3201 * Sets the area of the receiver which can be changed | |
3202 * by drawing operations to the rectangular area specified | |
3203 * by the arguments. | |
3204 * | |
3205 * @param x the x coordinate of the clipping rectangle | |
3206 * @param y the y coordinate of the clipping rectangle | |
3207 * @param width the width of the clipping rectangle | |
3208 * @param height the height of the clipping rectangle | |
3209 * | |
71 | 3210 * @exception DWTException <ul> |
18 | 3211 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3212 * </ul> | |
3213 */ | |
3214 public void setClipping(int x, int y, int width, int height) { | |
71 | 3215 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3216 if (width < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3217 x = x + width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3218 width = -width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3219 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3220 if (height < 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3221 y = y + height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3222 height = -height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3223 } |
202 | 3224 GdkRectangle rect; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3225 rect.x = x; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3226 rect.y = y; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3227 rect.width = width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3228 rect.height = height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3229 auto clipRgn = OS.gdk_region_new(); |
202 | 3230 OS.gdk_region_union_with_rect(clipRgn, &rect); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3231 setClipping(clipRgn); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3232 OS.gdk_region_destroy(clipRgn); |
18 | 3233 } |
3234 | |
3235 /** | |
3236 * Sets the area of the receiver which can be changed | |
3237 * by drawing operations to the path specified | |
3238 * by the argument. | |
3239 * <p> | |
3240 * This operation requires the operating system's advanced | |
3241 * graphics subsystem which may not be available on some | |
3242 * platforms. | |
3243 * </p> | |
3244 * | |
3245 * @param path the clipping path. | |
3246 * | |
3247 * @exception IllegalArgumentException <ul> | |
3248 * <li>ERROR_INVALID_ARGUMENT - if the path has been disposed</li> | |
3249 * </ul> | |
71 | 3250 * @exception DWTException <ul> |
18 | 3251 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3252 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
3253 * </ul> | |
3254 * | |
3255 * @see Path | |
3256 * @see #getAdvanced | |
3257 * @see #setAdvanced | |
3258 * | |
3259 * @since 3.1 | |
3260 */ | |
3261 public void setClipping(Path path) { | |
71 | 3262 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3263 if (path !is null && path.isDisposed()) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3264 setClipping(cast(GdkRegion*)null); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3265 if (path !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3266 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3267 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3268 auto copy = Cairo.cairo_copy_path(path.handle); |
71 | 3269 if (copy is null) DWT.error(DWT.ERROR_NO_HANDLES); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3270 Cairo.cairo_append_path(cairo, copy); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3271 Cairo.cairo_path_destroy(copy); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3272 Cairo.cairo_clip(cairo); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3273 } |
18 | 3274 } |
3275 | |
3276 /** | |
3277 * Sets the area of the receiver which can be changed | |
3278 * by drawing operations to the rectangular area specified | |
3279 * by the argument. Specifying <code>null</code> for the | |
3280 * rectangle reverts the receiver's clipping area to its | |
3281 * original value. | |
3282 * | |
3283 * @param rect the clipping rectangle or <code>null</code> | |
3284 * | |
71 | 3285 * @exception DWTException <ul> |
18 | 3286 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3287 * </ul> | |
3288 */ | |
3289 public void setClipping(Rectangle rect) { | |
71 | 3290 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3291 if (rect is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3292 setClipping(cast(GdkRegion*)null); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3293 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3294 setClipping(rect.x, rect.y, rect.width, rect.height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3295 } |
18 | 3296 } |
3297 /** | |
3298 * Sets the area of the receiver which can be changed | |
3299 * by drawing operations to the region specified | |
3300 * by the argument. Specifying <code>null</code> for the | |
3301 * region reverts the receiver's clipping area to its | |
3302 * original value. | |
3303 * | |
3304 * @param region the clipping region or <code>null</code> | |
3305 * | |
3306 * @exception IllegalArgumentException <ul> | |
3307 * <li>ERROR_INVALID_ARGUMENT - if the region has been disposed</li> | |
3308 * </ul> | |
71 | 3309 * @exception DWTException <ul> |
18 | 3310 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3311 * </ul> | |
3312 */ | |
3313 public void setClipping(Region region) { | |
71 | 3314 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3315 if (region !is null && region.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3316 setClipping(region !is null ? region.handle : cast(GdkRegion*)null); |
18 | 3317 } |
3318 | |
3319 /** | |
3320 * Sets the font which will be used by the receiver | |
3321 * to draw and measure text to the argument. If the | |
3322 * argument is null, then a default font appropriate | |
3323 * for the platform will be used instead. | |
3324 * | |
3325 * @param font the new font for the receiver, or null to indicate a default font | |
3326 * | |
3327 * @exception IllegalArgumentException <ul> | |
3328 * <li>ERROR_INVALID_ARGUMENT - if the font has been disposed</li> | |
3329 * </ul> | |
71 | 3330 * @exception DWTException <ul> |
18 | 3331 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3332 * </ul> | |
3333 */ | |
3334 public void setFont(Font font) { | |
71 | 3335 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
240 | 3336 if (font !is null && font.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
3337 data.font = font !is null ? font : data.device.systemFont; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3338 data.state &= ~FONT; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3339 data.stringWidth = data.stringHeight = -1; |
18 | 3340 } |
3341 | |
3342 /** | |
3343 * Sets the receiver's fill rule to the parameter, which must be one of | |
71 | 3344 * <code>DWT.FILL_EVEN_ODD</code> or <code>DWT.FILL_WINDING</code>. |
18 | 3345 * |
3346 * @param rule the new fill rule | |
3347 * | |
3348 * @exception IllegalArgumentException <ul> | |
71 | 3349 * <li>ERROR_INVALID_ARGUMENT - if the rule is not one of <code>DWT.FILL_EVEN_ODD</code> |
3350 * or <code>DWT.FILL_WINDING</code></li> | |
18 | 3351 * </ul> |
71 | 3352 * @exception DWTException <ul> |
18 | 3353 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3354 * </ul> | |
3355 * | |
3356 * @since 3.1 | |
3357 */ | |
3358 public void setFillRule(int rule) { | |
71 | 3359 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3360 int cairo_mode = Cairo.CAIRO_FILL_RULE_EVEN_ODD; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3361 switch (rule) { |
71 | 3362 case DWT.FILL_WINDING: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3363 cairo_mode = Cairo.CAIRO_FILL_RULE_WINDING; break; |
71 | 3364 case DWT.FILL_EVEN_ODD: |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3365 cairo_mode = Cairo.CAIRO_FILL_RULE_EVEN_ODD; break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3366 default: |
71 | 3367 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3368 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3369 //TODO - need fill rule in X, GDK has no API |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3370 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3371 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3372 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3373 Cairo.cairo_set_fill_rule(cairo, cairo_mode); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3374 } |
18 | 3375 } |
3376 | |
3377 /** | |
3378 * Sets the foreground color. The foreground color is used | |
3379 * for drawing operations including when text is drawn. | |
3380 * | |
3381 * @param color the new foreground color for the receiver | |
3382 * | |
3383 * @exception IllegalArgumentException <ul> | |
3384 * <li>ERROR_NULL_ARGUMENT - if the color is null</li> | |
3385 * <li>ERROR_INVALID_ARGUMENT - if the color has been disposed</li> | |
3386 * </ul> | |
71 | 3387 * @exception DWTException <ul> |
18 | 3388 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3389 * </ul> | |
3390 */ | |
3391 public void setForeground(Color color) { | |
71 | 3392 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3393 if (color is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
3394 if (color.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3395 data.foreground = color.handle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3396 data.foregroundPattern = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3397 data.state &= ~FOREGROUND; |
18 | 3398 } |
3399 | |
3400 /** | |
3401 * Sets the foreground pattern. The default value is <code>null</code>. | |
3402 * <p> | |
3403 * This operation requires the operating system's advanced | |
3404 * graphics subsystem which may not be available on some | |
3405 * platforms. | |
3406 * </p> | |
3407 * @param pattern the new foreground pattern | |
3408 * | |
3409 * @exception IllegalArgumentException <ul> | |
3410 * <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li> | |
3411 * </ul> | |
71 | 3412 * @exception DWTException <ul> |
18 | 3413 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3414 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
3415 * </ul> | |
3416 * | |
3417 * @see Pattern | |
3418 * @see #getAdvanced | |
3419 * @see #setAdvanced | |
3420 * | |
3421 * @since 3.1 | |
3422 */ | |
3423 public void setForegroundPattern(Pattern pattern) { | |
71 | 3424 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3425 if (pattern !is null && pattern.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3426 if (data.cairo is null && pattern is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3427 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3428 if (data.foregroundPattern is pattern) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3429 data.foregroundPattern = pattern; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3430 data.state &= ~FOREGROUND; |
18 | 3431 } |
3432 | |
3433 /** | |
3434 * Sets the receiver's interpolation setting to the parameter, which | |
71 | 3435 * must be one of <code>DWT.DEFAULT</code>, <code>DWT.NONE</code>, |
3436 * <code>DWT.LOW</code> or <code>DWT.HIGH</code>. | |
18 | 3437 * <p> |
3438 * This operation requires the operating system's advanced | |
3439 * graphics subsystem which may not be available on some | |
3440 * platforms. | |
3441 * </p> | |
3442 * | |
3443 * @param interpolation the new interpolation setting | |
3444 * | |
3445 * @exception IllegalArgumentException <ul> | |
71 | 3446 * <li>ERROR_INVALID_ARGUMENT - if the rule is not one of <code>DWT.DEFAULT</code>, |
3447 * <code>DWT.NONE</code>, <code>DWT.LOW</code> or <code>DWT.HIGH</code> | |
18 | 3448 * </ul> |
71 | 3449 * @exception DWTException <ul> |
18 | 3450 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3451 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
3452 * </ul> | |
3453 * | |
3454 * @see #getAdvanced | |
3455 * @see #setAdvanced | |
3456 * | |
3457 * @since 3.1 | |
3458 */ | |
3459 public void setInterpolation(int interpolation) { | |
71 | 3460 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3461 if (data.cairo is null && interpolation is DWT.DEFAULT) return; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3462 switch (interpolation) { |
71 | 3463 case DWT.DEFAULT: |
3464 case DWT.NONE: | |
3465 case DWT.LOW: | |
3466 case DWT.HIGH: | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3467 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3468 default: |
71 | 3469 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3470 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3471 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3472 data.interpolation = interpolation; |
18 | 3473 } |
3474 | |
3475 /** | |
3476 * Sets the receiver's line attributes. | |
3477 * <p> | |
3478 * This operation requires the operating system's advanced | |
3479 * graphics subsystem which may not be available on some | |
3480 * platforms. | |
3481 * </p> | |
3482 * @param attributes the line attributes | |
3483 * | |
3484 * @exception IllegalArgumentException <ul> | |
3485 * <li>ERROR_NULL_ARGUMENT - if the attributes is null</li> | |
3486 * <li>ERROR_INVALID_ARGUMENT - if any of the line attributes is not valid</li> | |
3487 * </ul> | |
71 | 3488 * @exception DWTException <ul> |
18 | 3489 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3490 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
3491 * </ul> | |
3492 * | |
3493 * @see LineAttributes | |
3494 * @see #getAdvanced | |
3495 * @see #setAdvanced | |
3496 * | |
3497 * @since 3.3 | |
3498 */ | |
3499 public void setLineAttributes(LineAttributes attributes) { | |
71 | 3500 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3501 if (attributes is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3502 int mask = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3503 float lineWidth = attributes.width; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3504 if (lineWidth !is data.lineWidth) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3505 mask |= LINE_WIDTH | DRAW_OFFSET; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3506 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3507 int lineStyle = attributes.style; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3508 if (lineStyle !is data.lineStyle) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3509 mask |= LINE_STYLE; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3510 switch (lineStyle) { |
71 | 3511 case DWT.LINE_SOLID: |
3512 case DWT.LINE_DASH: | |
3513 case DWT.LINE_DOT: | |
3514 case DWT.LINE_DASHDOT: | |
3515 case DWT.LINE_DASHDOTDOT: | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3516 break; |
71 | 3517 case DWT.LINE_CUSTOM: |
3518 if (attributes.dash is null) lineStyle = DWT.LINE_SOLID; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3519 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3520 default: |
71 | 3521 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3522 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3523 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3524 int join = attributes.join; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3525 if (join !is data.lineJoin) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3526 mask |= LINE_JOIN; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3527 switch (join) { |
71 | 3528 case DWT.CAP_ROUND: |
3529 case DWT.CAP_FLAT: | |
3530 case DWT.CAP_SQUARE: | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3531 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3532 default: |
71 | 3533 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3534 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3535 } |
240 | 3536 int cap = attributes.cap; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3537 if (cap !is data.lineCap) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3538 mask |= LINE_CAP; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3539 switch (cap) { |
71 | 3540 case DWT.JOIN_MITER: |
3541 case DWT.JOIN_ROUND: | |
3542 case DWT.JOIN_BEVEL: | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3543 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3544 default: |
71 | 3545 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3546 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3547 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3548 float[] dashes = attributes.dash; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3549 float[] lineDashes = data.lineDashes; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3550 if (dashes !is null && dashes.length > 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3551 bool changed = lineDashes is null || lineDashes.length !is dashes.length; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3552 for (int i = 0; i < dashes.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3553 float dash = dashes[i]; |
71 | 3554 if (dash <= 0) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3555 if (!changed && lineDashes[i] !is dash) changed = true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3556 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3557 if (changed) { |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
3558 float[] newDashes = new float[dashes.length]; |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
3559 System.arraycopy(dashes, 0, newDashes, 0, dashes.length); |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
3560 dashes = newDashes; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3561 mask |= LINE_STYLE; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3562 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3563 dashes = lineDashes; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3564 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3565 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3566 if (lineDashes !is null && lineDashes.length > 0) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3567 mask |= LINE_STYLE; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3568 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3569 dashes = lineDashes; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3570 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3571 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3572 float dashOffset = attributes.dashOffset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3573 if (dashOffset !is data.lineDashesOffset) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3574 mask |= LINE_STYLE; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3575 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3576 float miterLimit = attributes.miterLimit; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3577 if (miterLimit !is data.lineMiterLimit) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3578 mask |= LINE_MITERLIMIT; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3579 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3580 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3581 if (mask is 0) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3582 data.lineWidth = lineWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3583 data.lineStyle = lineStyle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3584 data.lineCap = cap; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3585 data.lineJoin = join; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3586 data.lineDashes = dashes; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3587 data.lineDashesOffset = dashOffset; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3588 data.lineMiterLimit = miterLimit; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3589 data.state &= ~mask; |
18 | 3590 } |
3591 | |
3592 /** | |
3593 * Sets the receiver's line cap style to the argument, which must be one | |
71 | 3594 * of the constants <code>DWT.CAP_FLAT</code>, <code>DWT.CAP_ROUND</code>, |
3595 * or <code>DWT.CAP_SQUARE</code>. | |
18 | 3596 * |
3597 * @param cap the cap style to be used for drawing lines | |
3598 * | |
3599 * @exception IllegalArgumentException <ul> | |
3600 * <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li> | |
3601 * </ul> | |
71 | 3602 * @exception DWTException <ul> |
18 | 3603 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3604 * </ul> | |
3605 * | |
3606 * @since 3.1 | |
3607 */ | |
3608 public void setLineCap(int cap) { | |
71 | 3609 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3610 if (data.lineCap is cap) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3611 switch (cap) { |
71 | 3612 case DWT.CAP_ROUND: |
3613 case DWT.CAP_FLAT: | |
3614 case DWT.CAP_SQUARE: | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3615 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3616 default: |
71 | 3617 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3618 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3619 data.lineCap = cap; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3620 data.state &= ~LINE_CAP; |
18 | 3621 } |
3622 | |
3623 /** | |
3624 * Sets the receiver's line dash style to the argument. The default | |
3625 * value is <code>null</code>. If the argument is not <code>null</code>, | |
71 | 3626 * the receiver's line style is set to <code>DWT.LINE_CUSTOM</code>, otherwise |
3627 * it is set to <code>DWT.LINE_SOLID</code>. | |
18 | 3628 * |
3629 * @param dashes the dash style to be used for drawing lines | |
3630 * | |
3631 * @exception IllegalArgumentException <ul> | |
3632 * <li>ERROR_INVALID_ARGUMENT - if any of the values in the array is less than or equal 0</li> | |
3633 * </ul> | |
71 | 3634 * @exception DWTException <ul> |
18 | 3635 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3636 * </ul> | |
3637 * | |
3638 * @since 3.1 | |
3639 */ | |
3640 public void setLineDash(int[] dashes) { | |
71 | 3641 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3642 float[] lineDashes = data.lineDashes; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3643 if (dashes !is null && dashes.length > 0) { |
71 | 3644 bool changed = data.lineStyle !is DWT.LINE_CUSTOM || lineDashes is null || lineDashes.length !is dashes.length; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3645 for (int i = 0; i < dashes.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3646 int dash = dashes[i]; |
71 | 3647 if (dash <= 0) DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3648 if (!changed && lineDashes[i] !is dash) changed = true; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3649 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3650 if (!changed) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3651 data.lineDashes = new float[dashes.length]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3652 for (int i = 0; i < dashes.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3653 data.lineDashes[i] = dashes[i]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3654 } |
71 | 3655 data.lineStyle = DWT.LINE_CUSTOM; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3656 } else { |
71 | 3657 if (data.lineStyle is DWT.LINE_SOLID && (lineDashes is null || lineDashes.length is 0)) return; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3658 data.lineDashes = null; |
71 | 3659 data.lineStyle = DWT.LINE_SOLID; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3660 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3661 data.state &= ~LINE_STYLE; |
18 | 3662 } |
3663 | |
3664 /** | |
3665 * Sets the receiver's line join style to the argument, which must be one | |
71 | 3666 * of the constants <code>DWT.JOIN_MITER</code>, <code>DWT.JOIN_ROUND</code>, |
3667 * or <code>DWT.JOIN_BEVEL</code>. | |
18 | 3668 * |
3669 * @param join the join style to be used for drawing lines | |
3670 * | |
3671 * @exception IllegalArgumentException <ul> | |
3672 * <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li> | |
3673 * </ul> | |
71 | 3674 * @exception DWTException <ul> |
18 | 3675 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3676 * </ul> | |
3677 * | |
3678 * @since 3.1 | |
3679 */ | |
3680 public void setLineJoin(int join) { | |
71 | 3681 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3682 if (data.lineJoin is join) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3683 switch (join) { |
71 | 3684 case DWT.JOIN_MITER: |
3685 case DWT.JOIN_ROUND: | |
3686 case DWT.JOIN_BEVEL: | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3687 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3688 default: |
71 | 3689 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3690 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3691 data.lineJoin = join; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3692 data.state &= ~LINE_JOIN; |
18 | 3693 } |
3694 | |
3695 /** | |
3696 * Sets the receiver's line style to the argument, which must be one | |
71 | 3697 * of the constants <code>DWT.LINE_SOLID</code>, <code>DWT.LINE_DASH</code>, |
3698 * <code>DWT.LINE_DOT</code>, <code>DWT.LINE_DASHDOT</code> or | |
3699 * <code>DWT.LINE_DASHDOTDOT</code>. | |
18 | 3700 * |
3701 * @param lineStyle the style to be used for drawing lines | |
3702 * | |
3703 * @exception IllegalArgumentException <ul> | |
3704 * <li>ERROR_INVALID_ARGUMENT - if the style is not valid</li> | |
3705 * </ul> | |
71 | 3706 * @exception DWTException <ul> |
18 | 3707 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3708 * </ul> | |
3709 */ | |
3710 public void setLineStyle(int lineStyle) { | |
71 | 3711 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3712 if (data.lineStyle is lineStyle) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3713 switch (lineStyle) { |
71 | 3714 case DWT.LINE_SOLID: |
3715 case DWT.LINE_DASH: | |
3716 case DWT.LINE_DOT: | |
3717 case DWT.LINE_DASHDOT: | |
3718 case DWT.LINE_DASHDOTDOT: | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3719 break; |
71 | 3720 case DWT.LINE_CUSTOM: |
3721 if (data.lineDashes is null) lineStyle = DWT.LINE_SOLID; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3722 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3723 default: |
71 | 3724 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3725 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3726 data.lineStyle = lineStyle; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3727 data.state &= ~LINE_STYLE; |
18 | 3728 } |
3729 | |
3730 /** | |
3731 * Sets the width that will be used when drawing lines | |
3732 * for all of the figure drawing operations (that is, | |
3733 * <code>drawLine</code>, <code>drawRectangle</code>, | |
3734 * <code>drawPolyline</code>, and so forth. | |
3735 * <p> | |
3736 * Note that line width of zero is used as a hint to | |
3737 * indicate that the fastest possible line drawing | |
3738 * algorithms should be used. This means that the | |
3739 * output may be different from line width one. | |
3740 * </p> | |
3741 * | |
3742 * @param lineWidth the width of a line | |
3743 * | |
71 | 3744 * @exception DWTException <ul> |
18 | 3745 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3746 * </ul> | |
3747 */ | |
3748 public void setLineWidth(int lineWidth) { | |
71 | 3749 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3750 if (data.lineWidth is lineWidth) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3751 data.lineWidth = lineWidth; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3752 data.state &= ~(LINE_WIDTH | DRAW_OFFSET); |
18 | 3753 } |
3754 | |
238 | 3755 void setString(String str, int flags) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3756 if (data.layout is null) createLayout(); |
71 | 3757 if (str is data.str && (flags & ~DWT.DRAW_TRANSPARENT) is (data.drawFlags & ~DWT.DRAW_TRANSPARENT)) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3758 return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3759 } |
238 | 3760 String buffer; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3761 int mnemonic, len = str.length ; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3762 auto layout = data.layout; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3763 char[] text = str.dup; |
71 | 3764 if ((flags & DWT.DRAW_MNEMONIC) !is 0 && (mnemonic = fixMnemonic(text)) !is -1) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3765 char[] text1 = new char[mnemonic - 1]; |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
3766 System.arraycopy(text, 0, text1, 0, text1.length); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3767 char[] buffer1 = text1.dup; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3768 char[] text2 = new char[text.length - mnemonic]; |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
3769 System.arraycopy(text, mnemonic - 1, text2, 0, text2.length); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3770 char[] buffer2 = text2.dup; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3771 buffer = new char[buffer1.length + buffer2.length]; |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
3772 System.arraycopy(buffer1, 0, buffer, 0, buffer1.length); |
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
24
diff
changeset
|
3773 System.arraycopy(buffer2, 0, buffer, buffer1.length, buffer2.length); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3774 auto attr_list = OS.pango_attr_list_new(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3775 auto attr = OS.pango_attr_underline_new(OS.PANGO_UNDERLINE_LOW); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3776 attr.start_index = buffer1.length; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3777 attr.end_index = buffer1.length + 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3778 OS.pango_attr_list_insert(attr_list, attr); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3779 OS.pango_layout_set_attributes(layout, attr_list); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3780 OS.pango_attr_list_unref(attr_list); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3781 } else { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3782 buffer = text.dup; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3783 OS.pango_layout_set_attributes(layout, null); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3784 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3785 OS.pango_layout_set_text(layout, buffer.ptr, buffer.length); |
71 | 3786 OS.pango_layout_set_single_paragraph_mode(layout, (flags & DWT.DRAW_DELIMITER) is 0); |
3787 OS.pango_layout_set_tabs(layout, (flags & DWT.DRAW_TAB) !is 0 ? null : data.device.emptyTab); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3788 data.str = str; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3789 data.stringWidth = data.stringHeight = -1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3790 data.drawFlags = flags; |
18 | 3791 } |
3792 | |
3793 /** | |
3794 * Sets the receiver's text anti-aliasing value to the parameter, | |
71 | 3795 * which must be one of <code>DWT.DEFAULT</code>, <code>DWT.OFF</code> |
3796 * or <code>DWT.ON</code>. Note that this controls anti-aliasing only | |
18 | 3797 * for all <em>text drawing</em> operations. |
3798 * <p> | |
3799 * This operation requires the operating system's advanced | |
3800 * graphics subsystem which may not be available on some | |
3801 * platforms. | |
3802 * </p> | |
3803 * | |
3804 * @param antialias the anti-aliasing setting | |
3805 * | |
3806 * @exception IllegalArgumentException <ul> | |
71 | 3807 * <li>ERROR_INVALID_ARGUMENT - if the parameter is not one of <code>DWT.DEFAULT</code>, |
3808 * <code>DWT.OFF</code> or <code>DWT.ON</code></li> | |
18 | 3809 * </ul> |
71 | 3810 * @exception DWTException <ul> |
18 | 3811 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3812 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
3813 * </ul> | |
3814 * | |
3815 * @see #getAdvanced | |
3816 * @see #setAdvanced | |
3817 * @see #setAntialias | |
3818 * | |
3819 * @since 3.1 | |
3820 */ | |
3821 public void setTextAntialias(int antialias) { | |
71 | 3822 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3823 if (data.cairo is null && antialias is DWT.DEFAULT) return; | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3824 int mode = 0; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3825 switch (antialias) { |
71 | 3826 case DWT.DEFAULT: mode = Cairo.CAIRO_ANTIALIAS_DEFAULT; break; |
3827 case DWT.OFF: mode = Cairo.CAIRO_ANTIALIAS_NONE; break; | |
3828 case DWT.ON: mode = Cairo.CAIRO_ANTIALIAS_GRAY; | |
18 | 3829 break; |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3830 default: |
71 | 3831 DWT.error(DWT.ERROR_INVALID_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3832 } |
18 | 3833 initCairo(); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3834 auto options = Cairo.cairo_font_options_create(); |
33
27324bbbac70
changed to regenerated BCD bindings
Frank Benoit <benoit@tionex.de>
parents:
28
diff
changeset
|
3835 Cairo.cairo_font_options_set_antialias(options, mode); |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3836 if (OS.GTK_VERSION < OS.buildVERSION(2, 8, 0)) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3837 Cairo.cairo_set_font_options(data.cairo, options); |
18 | 3838 } else { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3839 if (data.context is null) createLayout(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3840 OS.pango_cairo_context_set_font_options(data.context, options); |
18 | 3841 } |
3842 Cairo.cairo_font_options_destroy(options); | |
3843 } | |
3844 | |
3845 /** | |
3846 * Sets the transform that is currently being used by the receiver. If | |
3847 * the argument is <code>null</code>, the current transform is set to | |
3848 * the identity transform. | |
3849 * <p> | |
3850 * This operation requires the operating system's advanced | |
3851 * graphics subsystem which may not be available on some | |
3852 * platforms. | |
3853 * </p> | |
3854 * | |
3855 * @param transform the transform to set | |
3856 * | |
3857 * @exception IllegalArgumentException <ul> | |
3858 * <li>ERROR_INVALID_ARGUMENT - if the parameter has been disposed</li> | |
3859 * </ul> | |
71 | 3860 * @exception DWTException <ul> |
18 | 3861 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3862 * <li>ERROR_NO_GRAPHICS_LIBRARY - if advanced graphics are not available</li> | |
3863 * </ul> | |
3864 * | |
3865 * @see Transform | |
3866 * @see #getAdvanced | |
3867 * @see #setAdvanced | |
3868 * | |
3869 * @since 3.1 | |
3870 */ | |
3871 public void setTransform(Transform transform) { | |
71 | 3872 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
3873 if (transform !is null && transform.isDisposed()) DWT.error(DWT.ERROR_INVALID_ARGUMENT); | |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3874 if (data.cairo is null && transform is null) return; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3875 initCairo(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3876 auto cairo = data.cairo; |
240 | 3877 double[] identity = identity(); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3878 if (transform !is null) { |
240 | 3879 Cairo.cairo_matrix_multiply(cast(cairo_matrix_t*)identity.ptr, cast(cairo_matrix_t*)transform.handle.ptr, cast(cairo_matrix_t*)identity.ptr); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3880 } |
240 | 3881 Cairo.cairo_set_matrix(cairo, cast(cairo_matrix_t*)identity.ptr); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3882 data.state &= ~DRAW_OFFSET; |
18 | 3883 } |
3884 | |
3885 /** | |
3886 * If the argument is <code>true</code>, puts the receiver | |
3887 * in a drawing mode where the resulting color in the destination | |
3888 * is the <em>exclusive or</em> of the color values in the source | |
3889 * and the destination, and if the argument is <code>false</code>, | |
3890 * puts the receiver in a drawing mode where the destination color | |
3891 * is replaced with the source color value. | |
3892 * <p> | |
3893 * Note that this mode in fundamentally unsupportable on certain | |
3894 * platforms, notably Carbon (Mac OS X). Clients that want their | |
3895 * code to run on all platforms need to avoid this method. | |
3896 * </p> | |
3897 * | |
3898 * @param xor if <code>true</code>, then <em>xor</em> mode is used, otherwise <em>source copy</em> mode is used | |
3899 * | |
71 | 3900 * @exception DWTException <ul> |
18 | 3901 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3902 * </ul> | |
3903 * | |
3904 * @deprecated this functionality is not supported on some platforms | |
3905 */ | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3906 public void setXORMode(bool xor) { |
71 | 3907 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3908 OS.gdk_gc_set_function(handle, xor ? OS.GDK_XOR : OS.GDK_COPY); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3909 data.xorMode = xor; |
18 | 3910 } |
3911 | |
3912 /** | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3913 * Returns the extent of the given str. No tab |
18 | 3914 * expansion or carriage return processing will be performed. |
3915 * <p> | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3916 * The <em>extent</em> of a str is the width and height of |
18 | 3917 * the rectangular area it would cover if drawn in a particular |
3918 * font (in this case, the current font in the receiver). | |
3919 * </p> | |
3920 * | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3921 * @param str the str to measure |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3922 * @return a point containing the extent of the str |
18 | 3923 * |
71 | 3924 * @exception DWTException <ul> |
18 | 3925 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3926 * </ul> | |
3927 */ | |
238 | 3928 public Point stringExtent(String str) { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3929 return textExtent(str, 0); |
18 | 3930 } |
3931 | |
3932 /** | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3933 * Returns the extent of the given str. Tab expansion and |
18 | 3934 * carriage return processing are performed. |
3935 * <p> | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3936 * The <em>extent</em> of a str is the width and height of |
18 | 3937 * the rectangular area it would cover if drawn in a particular |
3938 * font (in this case, the current font in the receiver). | |
3939 * </p> | |
3940 * | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3941 * @param str the str to measure |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3942 * @return a point containing the extent of the str |
18 | 3943 * |
71 | 3944 * @exception DWTException <ul> |
18 | 3945 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3946 * </ul> | |
3947 */ | |
238 | 3948 public Point textExtent(String str) { |
71 | 3949 return textExtent(str, DWT.DRAW_DELIMITER | DWT.DRAW_TAB); |
18 | 3950 } |
3951 | |
3952 /** | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3953 * Returns the extent of the given str. Tab expansion, line |
18 | 3954 * delimiter and mnemonic processing are performed according to |
3955 * the specified flags, which can be a combination of: | |
3956 * <dl> | |
3957 * <dt><b>DRAW_DELIMITER</b></dt> | |
3958 * <dd>draw multiple lines</dd> | |
3959 * <dt><b>DRAW_TAB</b></dt> | |
3960 * <dd>expand tabs</dd> | |
3961 * <dt><b>DRAW_MNEMONIC</b></dt> | |
3962 * <dd>underline the mnemonic character</dd> | |
3963 * <dt><b>DRAW_TRANSPARENT</b></dt> | |
3964 * <dd>transparent background</dd> | |
3965 * </dl> | |
3966 * <p> | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3967 * The <em>extent</em> of a str is the width and height of |
18 | 3968 * the rectangular area it would cover if drawn in a particular |
3969 * font (in this case, the current font in the receiver). | |
3970 * </p> | |
3971 * | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3972 * @param str the str to measure |
18 | 3973 * @param flags the flags specifying how to process the text |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
3974 * @return a point containing the extent of the str |
18 | 3975 * |
71 | 3976 * @exception DWTException <ul> |
18 | 3977 * <li>ERROR_GRAPHIC_DISPOSED - if the receiver has been disposed</li> |
3978 * </ul> | |
3979 */ | |
238 | 3980 public Point textExtent(String str, int flags) { |
71 | 3981 if (handle is null) DWT.error(DWT.ERROR_GRAPHIC_DISPOSED); |
242
448eacc3a526
Change behaviour of dwt.graphics.GC textExtend(): allow null for string argument
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
3982 //DWT_CHANGE: allow null for string |
448eacc3a526
Change behaviour of dwt.graphics.GC textExtend(): allow null for string argument
Frank Benoit <benoit@tionex.de>
parents:
240
diff
changeset
|
3983 //if (str is null) DWT.error(DWT.ERROR_NULL_ARGUMENT); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3984 auto cairo = data.cairo; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3985 if (cairo !is null) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3986 if (OS.GTK_VERSION < OS.buildVERSION(2, 8, 0)) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3987 //TODO - honor flags |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3988 checkGC(FONT); |
199
a5adab24940b
Fix missing string termination, thx nascent for example code.
Frank Benoit <benoit@tionex.de>
parents:
194
diff
changeset
|
3989 char* buffer = toStringz(str); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3990 cairo_font_extents_t* font_extents = new cairo_font_extents_t(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3991 Cairo.cairo_font_extents(cairo, font_extents); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3992 cairo_text_extents_t* extents = new cairo_text_extents_t(); |
199
a5adab24940b
Fix missing string termination, thx nascent for example code.
Frank Benoit <benoit@tionex.de>
parents:
194
diff
changeset
|
3993 Cairo.cairo_text_extents(cairo, buffer, extents); |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3994 return new Point(cast(int)extents.width, cast(int)font_extents.height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3995 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3996 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3997 setString(str, flags); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3998 checkGC(FONT); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
3999 if (data.stringWidth !is -1) return new Point(data.stringWidth, data.stringHeight); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
4000 int width, height; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
4001 OS.pango_layout_get_size(data.layout, &width, &height); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
4002 return new Point(data.stringWidth = OS.PANGO_PIXELS(width), data.stringHeight = OS.PANGO_PIXELS(height)); |
18 | 4003 } |
4004 | |
4005 /** | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
4006 * Returns a str containing a concise, human-readable |
18 | 4007 * description of the receiver. |
4008 * | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
4009 * @return a str representation of the receiver |
18 | 4010 */ |
238 | 4011 public override String toString () { |
59
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
4012 if (isDisposed()) return "GC {*DISPOSED*}"; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
4013 return Format( "GC {{{}}", handle ); |
18 | 4014 } |
4015 | |
4016 } | |
24
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
4017 |
bc06000c0816
TextLayout and GC, graphics complete
Frank Benoit <benoit@tionex.de>
parents:
21
diff
changeset
|
4018 |