Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
widgets/paint.c
Go to the documentation of this file.
1/*
2 This file is part of darktable,
3 Copyright (C) 2010-2012 Henrik Andersson.
4 Copyright (C) 2010-2012 johannes hanika.
5 Copyright (C) 2010-2016, 2018, 2020 Tobias Ellinghaus.
6 Copyright (C) 2010 Wyatt Olson.
7 Copyright (C) 2011 Petr Styblo.
8 Copyright (C) 2011 Robert Bieber.
9 Copyright (C) 2012 Jérémy Rosen.
10 Copyright (C) 2012 Loic Guibert.
11 Copyright (C) 2012 Richard Wonka.
12 Copyright (C) 2012-2013, 2016-2017, 2019 Ulrich Pegelow.
13 Copyright (C) 2013, 2015, 2020-2022 Aldric Renaudin.
14 Copyright (C) 2013, 2018-2022 Pascal Obry.
15 Copyright (C) 2014 Mikhail Trishchenkov.
16 Copyright (C) 2015-2016 Roman Lebedev.
17 Copyright (C) 2016 Asma.
18 Copyright (C) 2018 grand-piano.
19 Copyright (C) 2018 Matthieu Moy.
20 Copyright (C) 2019-2020, 2023, 2025 Aurélien PIERRE.
21 Copyright (C) 2019 Edgardo Hoszowski.
22 Copyright (C) 2019 Florian Wernert.
23 Copyright (C) 2019 luzpaz.
24 Copyright (C) 2019, 2021-2022 Philippe Weyland.
25 Copyright (C) 2020 Chris Elston.
26 Copyright (C) 2020 Hanno Schwalm.
27 Copyright (C) 2020-2021 Hubert Kowalski.
28 Copyright (C) 2020-2021 Marco.
29 Copyright (C) 2020-2021 Mark-64.
30 Copyright (C) 2020 Ralf Brown.
31 Copyright (C) 2020 U-DESKTOP-HQME86J\marco.
32 Copyright (C) 2021 Dan Torop.
33 Copyright (C) 2021 Diederik Ter Rahe.
34 Copyright (C) 2021 Harald.
35 Copyright (C) 2021-2022 Nicolas Auffray.
36 Copyright (C) 2022 Martin Bařinka.
37
38 darktable is free software: you can redistribute it and/or modify
39 it under the terms of the GNU General Public License as published by
40 the Free Software Foundation, either version 3 of the License, or
41 (at your option) any later version.
42
43 darktable is distributed in the hope that it will be useful,
44 but WITHOUT ANY WARRANTY; without even the implied warranty of
45 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
46 GNU General Public License for more details.
47
48 You should have received a copy of the GNU General Public License
49 along with darktable. If not, see <http://www.gnu.org/licenses/>.
50*/
51
52#include "system/mem_alloc.h"
54#include "widgets/paint.h"
55#include "widgets/draw.h"
56#include <math.h>
57
58#ifndef M_PI
59#define M_PI 3.141592654
60#endif
61
62#define PREAMBLE(scaling, line_scaling, x_offset, y_offset) { \
63 cairo_save(cr); \
64 cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); \
65 const float s = ((w < h) ? w : h) * scaling; \
66 cairo_translate(cr, x + (w / 2.0) - (s / 2.0), y + (h / 2.0) - (s / 2.0)); \
67 cairo_scale(cr, s, s); \
68 cairo_translate(cr, x_offset, y_offset); \
69 cairo_matrix_t matrix; \
70 cairo_get_matrix(cr, &matrix); \
71 cairo_set_line_width(cr, 1. / hypot(matrix.xx, matrix.yy)); }
72
73#define FINISH { cairo_identity_matrix(cr); \
74 cairo_restore(cr); }
75
76// The icon canvas is the unit square, with a tenth of it as the corner radius.
77static inline void _rounded_rectangle(cairo_t *cr)
78{
79 dt_draw_rounded_rectangle_path(cr, 0.0, 0.0, 1.0, 1.0, 0.1);
80}
81
96static void _paint_cursor_arrow(cairo_t *cr, const double tip_x, const double tip_y, const double size)
97{
98 // Unit geometry: tip at (0, 0), total height 1.0.
99 const double axis_len = sqrt(0.39 * 0.39 + 0.75 * 0.75);
100 const double axis_x = 0.39 / axis_len;
101 const double axis_y = 0.75 / axis_len;
102 // Place control points symmetrically about the central axis through the tip and curve center.
103 const double curve_ctrl_axis_offset = -0.2;
104 const double curve_ctrl_0_x = 0.39 + axis_x * curve_ctrl_axis_offset;
105 const double curve_ctrl_0_y = 0.75 + axis_y * curve_ctrl_axis_offset;
106 //const double curve_ctrl_1_x = 0.39 - axis_x * curve_ctrl_axis_offset;
107 //const double curve_ctrl_1_y = 0.75 - axis_y * curve_ctrl_axis_offset;
108 // Keep the tail centered on the arrow axis so the center line crosses it.
109 const double base_axis_offset = 0.33 * axis_x + 0.49 * axis_y;
110 const double tail_axis_offset = 0.3;
113 const double tail_length = 0.47;
114 const double tail_half_width = 0.09;
115 const double tail_dir_x = axis_x;
116 const double tail_dir_y = axis_y;
117 const double tail_half_length = tail_length * 0.5;
120 const double tail_perp_x = -tail_dir_y * tail_half_width;
121 const double tail_perp_y = tail_dir_x * tail_half_width;
124
125 cairo_save(cr);
127 cairo_scale(cr, size, size);
128
129 // Arrow body: start at the tip, then sweep around the triangular head.
130 cairo_move_to(cr, 0.0, 0.0);
131 cairo_line_to(cr, 0.78, 0.60);
133 0.0, 0.89);
134 cairo_line_to(cr, 0.0, 1.0);
136 cairo_fill(cr);
137
138 // Rectangular tail from the center of the arrow base.
144 cairo_fill(cr);
145
146 cairo_restore(cr);
147}
148
149void dtgtk_cairo_paint_empty(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
150{
151 PREAMBLE(1, 1, 0, 0)
152 cairo_stroke(cr);
153 FINISH
154}
155
156void dtgtk_cairo_paint_color(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
157{
158 PREAMBLE(1, 1, 0, 0)
159
160 cairo_translate(cr, x, y);
161 cairo_scale(cr, w, h);
162 cairo_rectangle(cr, 0.1, 0.1, 0.8, 0.8);
163 cairo_fill(cr);
164 cairo_set_source_rgba(cr, 0, 0, 0, 0.6);
165 cairo_stroke(cr);
166
167 FINISH
168}
169
170void dtgtk_cairo_paint_presets(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
171{
172 PREAMBLE(1, 1, 0, 0)
173
174 cairo_move_to(cr, 0.1, 0.1);
175 cairo_line_to(cr, 0.9, 0.1);
176 cairo_move_to(cr, 0.1, 0.5);
177 cairo_line_to(cr, 0.9, 0.5);
178 cairo_move_to(cr, 0.1, 0.9);
179 cairo_line_to(cr, 0.9, 0.9);
180 cairo_stroke(cr);
181
182 FINISH
183}
184
185static void _draw_triangle(cairo_t *cr, const gint flags) // create triangle for both following icons
186{
187 /* initialize rotation and flip matrices */
189 cairo_matrix_init(&hflip_matrix, -1, 0, 0, 1, 1, 0);
190
191 double C = cosf(-(M_PI / 2.0f)), S = sinf(-(M_PI / 2.0f)); // -90 degrees
192 C = flags & CPF_DIRECTION_DOWN ? cosf(-(M_PI * 1.5f)) : C;
193 S = flags & CPF_DIRECTION_DOWN ? sinf(-(M_PI * 1.5f)) : S;
195 cairo_matrix_init(&rotation_matrix, C, S, -S, C, 0.5 - C * 0.5 + S * 0.5, 0.5 - S * 0.5 - C * 0.5);
196
197 /* scale and transform*/
200 else if(flags & CPF_DIRECTION_LEFT) // Flip x transformation
202
203 cairo_move_to(cr, 0.05, 0.5);
204 cairo_line_to(cr, 0.05, 0.1);
205 cairo_line_to(cr, 0.45, 0.5);
206 cairo_line_to(cr, 0.05, 0.9);
207 cairo_line_to(cr, 0.05, 0.5);
208}
209
210void dtgtk_cairo_paint_triangle(cairo_t *cr, gint x, int y, gint w, gint h, gint flags, void *data)
211{
212 PREAMBLE(1, 1, 0, 0)
213
215 cairo_stroke(cr);
216
217 FINISH
218}
219
220void dtgtk_cairo_paint_solid_triangle(cairo_t *cr, gint x, int y, gint w, gint h, gint flags, void *data)
221{
222 PREAMBLE(1, 1, 0, 0)
223
227 cairo_fill(cr);
228
229 FINISH
230}
231
232void dtgtk_cairo_paint_arrow(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
233{
234 PREAMBLE(1, 1, 0, 0)
235
237 cairo_matrix_init(&hflip_matrix, -1, 0, 0, 1, 1, 0);
238
239 double C = cosf(-(M_PI / 2.0)), S = sinf(-(M_PI / 2.0)); // -90 degrees
240 C = flags & CPF_DIRECTION_UP ? cosf(-(M_PI * 1.5f)) : C;
241 S = flags & CPF_DIRECTION_UP ? sinf(-(M_PI * 1.5f)) : S;
244 C, S, -S, C,
245 0.5 - C * 0.5 + S * 0.5,
246 0.5 - S * 0.5 - C * 0.5);
247
250 else if(flags & CPF_DIRECTION_RIGHT) // Flip x transformation
252
253 cairo_move_to(cr, 0.25, 0.1);
254 cairo_line_to(cr, 0.75, 0.5);
255 cairo_line_to(cr, 0.25, 0.9);
256 cairo_stroke(cr);
257
258 FINISH
259}
260
261void dtgtk_cairo_paint_solid_arrow(cairo_t *cr, gint x, int y, gint w, gint h, gint flags, void *data)
262{
263 PREAMBLE(1, 1, 0, 0)
264
265 /* initialize rotation and flip matrices */
267 cairo_matrix_init(&hflip_matrix, -1, 0, 0, 1, 1, 0);
268
269 double C = cosf(-(M_PI / 2.0f)), S = sinf(-(M_PI / 2.0f)); // -90 degrees
270 C = flags & CPF_DIRECTION_DOWN ? cosf(-(M_PI * 1.5f)) : C;
271 S = flags & CPF_DIRECTION_DOWN ? sinf(-(M_PI * 1.5f)) : S;
273 cairo_matrix_init(&rotation_matrix, C, S, -S, C, 0.5 - C * 0.5 + S * 0.5, 0.5 - S * 0.5 - C * 0.5);
274
275 /* scale and transform*/
278 else if(flags & CPF_DIRECTION_LEFT) // Flip x transformation
280
281 cairo_move_to(cr, 0.2, 0.1);
282 cairo_line_to(cr, 0.9, 0.5);
283 cairo_line_to(cr, 0.2, 0.9);
284 cairo_fill(cr);
285
286 FINISH
287}
288
289void dtgtk_cairo_paint_line_arrow(cairo_t *cr, gint x, int y, gint w, gint h, gint flags, void *data)
290{
291 PREAMBLE(1, 1, 0, 0)
292
293 cairo_move_to(cr, 0.1, 0.5);
294 cairo_line_to(cr, 0.9, 0.5);
295 cairo_stroke(cr);
296
297 /* initialize flip matrices */
299 cairo_matrix_init(&hflip_matrix, -1, 0, 0, 1, 1, 0);
300
301 /* scale and transform*/
302 if(flags & CPF_DIRECTION_LEFT) // Flip x transformation
304
305 cairo_move_to(cr, 0.4, 0.1);
306 cairo_line_to(cr, 0.0, 0.5);
307 cairo_line_to(cr, 0.4, 0.9);
308 cairo_fill(cr);
309
310 FINISH
311}
312
313void dtgtk_cairo_paint_sortby(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
314{
315 PREAMBLE(1, 1.2, 0, 0)
316
317 cairo_move_to(cr, 0.1, 0.05);
318 cairo_line_to(cr, 0.1, 0.95);
319 cairo_move_to(cr, 0.0, 0.80);
320 cairo_line_to(cr, 0.1, 0.95);
321 cairo_line_to(cr, 0.2, 0.80);
322 cairo_stroke(cr);
323
325 {
326 cairo_move_to(cr, 0.35, 0.05);
327 cairo_line_to(cr, 0.45, 0.05);
328 cairo_move_to(cr, 0.35, 0.35);
329 cairo_line_to(cr, 0.65, 0.35);
330 cairo_move_to(cr, 0.35, 0.65);
331 cairo_line_to(cr, 0.85, 0.65);
332 cairo_move_to(cr, 0.35, 0.95);
333 cairo_line_to(cr, 1.00, 0.95);
334 }
335 else
336 {
337 cairo_move_to(cr, 0.35, 0.05);
338 cairo_line_to(cr, 1.00, 0.05);
339 cairo_move_to(cr, 0.35, 0.35);
340 cairo_line_to(cr, 0.85, 0.35);
341 cairo_move_to(cr, 0.35, 0.65);
342 cairo_line_to(cr, 0.65, 0.65);
343 cairo_move_to(cr, 0.35, 0.95);
344 cairo_line_to(cr, 0.45, 0.95);
345 }
346 cairo_stroke(cr);
347
348 FINISH
349}
350
351void dtgtk_cairo_paint_flip(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
352{
353 PREAMBLE(1, 1, 0, 0)
354
355 double C = cosf(-1.570796327f), S = sinf(-1.570796327f);
357 cairo_matrix_init(&rotation_matrix, C, S, -S, C, 0.5 - C * 0.5 + S * 0.5, 0.5 - S * 0.5 - C * 0.5);
358
359 if((flags & CPF_DIRECTION_UP)) // Rotate -90 degrees
361
362 cairo_move_to(cr, 0.05, 0.4);
363 cairo_line_to(cr, 0.05, 0);
364 cairo_line_to(cr, 0.95, 0.4);
365 cairo_line_to(cr, 0.05, 0.4);
367 cairo_stroke(cr);
368
369 cairo_move_to(cr, 0.05, 0.6);
370 cairo_line_to(cr, 0.05, 1.0);
371 cairo_line_to(cr, 0.95, 0.6);
372 cairo_line_to(cr, 0.05, 0.6);
373 cairo_stroke(cr);
374
375 FINISH
376}
377
378void dtgtk_cairo_paint_reset(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
379{
380 PREAMBLE(1, 1, 0, 0)
381
382 cairo_arc(cr, 0.5, 0.5, 0.46, 0, 6.2832);
383 cairo_move_to(cr, 0.5, 0.32);
384 cairo_line_to(cr, 0.5, 0.68);
385 cairo_stroke(cr);
386
387 FINISH
388}
389
390void dtgtk_cairo_paint_store(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
391{
392 PREAMBLE(1, 1, 0, 0)
393
394 cairo_move_to(cr, 0.275, 0.1);
395 cairo_line_to(cr, 0.1, 0.1);
396 cairo_line_to(cr, 0.1, 0.9);
397 cairo_line_to(cr, 0.9, 0.9);
398 cairo_line_to(cr, 0.9, 0.175);
399 cairo_line_to(cr, 0.825, 0.1);
400 cairo_line_to(cr, 0.825, 0.5);
401 cairo_line_to(cr, 0.275, 0.5);
402 cairo_line_to(cr, 0.275, 0.1);
403
404 cairo_stroke(cr);
405 cairo_rectangle(cr, 0.5, 0.025, 0.17, 0.275);
406 cairo_fill(cr);
407 cairo_stroke(cr);
408
409 FINISH
410}
411
412void dtgtk_cairo_paint_switch(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
413{
414 PREAMBLE(1, 1, 0, 0)
415
416 cairo_arc(cr, 0.5, 0.5, 0.46, (-50 * 3.145 / 180), (230 * 3.145 / 180));
417 cairo_move_to(cr, 0.5, 0.0);
418 cairo_line_to(cr, 0.5, 0.5);
419 cairo_stroke(cr);
420
421 FINISH
422}
423
424void dtgtk_cairo_paint_module_switch(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
425{
426 PREAMBLE(1, 1, 0, 0)
427
428 const gboolean prelight = flags & CPF_PRELIGHT;
429 const double bar_w = prelight ? 0.76 : 0.16;
430 const double bar_x = 0.5 - bar_w * 0.5;
431 const double bar_y = 0.08;
432 const double bar_h = 0.84;
433 const double radius = bar_w * 0.5;
434
436 cairo_arc(cr, bar_x + bar_w - radius, bar_y + radius, radius, -M_PI / 2.0, 0.0);
437 cairo_arc(cr, bar_x + bar_w - radius, bar_y + bar_h - radius, radius, 0.0, M_PI / 2.0);
438 cairo_arc(cr, bar_x + radius, bar_y + bar_h - radius, radius, M_PI / 2.0, M_PI);
439 cairo_arc(cr, bar_x + radius, bar_y + radius, radius, M_PI, 3.0 * M_PI / 2.0);
441 cairo_fill(cr);
442
443 FINISH
444}
445
446void dtgtk_cairo_paint_module_switch_on(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
447{
448 PREAMBLE(1, 1, 0, 0)
449
450 const double dot_radius = 0.09;
451
452 cairo_arc(cr, 0.5, 0.5, dot_radius, 0.0, 2.0 * M_PI);
453 cairo_fill(cr);
454
455 FINISH
456}
457
458void dtgtk_cairo_paint_switch_inactive(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
459{
460 PREAMBLE(1, .3f, 0, 0)
461
462 cairo_arc(cr, 0.5, 0.5, 0.46, (-50 * 3.145 / 180), (230 * 3.145 / 180));
463 cairo_move_to(cr, 0.5, 0.0);
464 cairo_line_to(cr, 0.5, 0.5);
465 cairo_stroke(cr);
466
467 FINISH
468}
469
470void dtgtk_cairo_paint_switch_on(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
471{
472 PREAMBLE(1, 1, 0, 0)
473
474 cairo_arc(cr, 0.5, 0.5, 0.50, 0, 2 * M_PI);
475 cairo_stroke(cr);
476
477 cairo_arc(cr, 0.5, 0.5, 0.30, 0, 2 * M_PI);
478 cairo_fill(cr);
479
480 FINISH
481}
482
483void dtgtk_cairo_paint_switch_off(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
484{
485 PREAMBLE(1, 1, 0, 0)
486
487 cairo_arc(cr, 0.5, 0.5, 0.50, 0, 2 * M_PI);
488 cairo_stroke(cr);
489
490 FINISH
491}
492
493void dtgtk_cairo_paint_switch_deprecated(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
494{
495 PREAMBLE(1, 1, 0, 0)
496
497 cairo_move_to(cr, 0.1, 0.1);
498 cairo_line_to(cr, 0.9, 0.9);
499 cairo_move_to(cr, 0.1, 0.9);
500 cairo_line_to(cr, 0.9, 0.1);
501 cairo_stroke(cr);
502
503 FINISH
504}
505
506void dtgtk_cairo_paint_plus(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
507{
508 dtgtk_cairo_paint_plusminus(cr, x, y, w, h, flags | CPF_ACTIVE, data);
509}
510
511void dtgtk_cairo_paint_plusminus(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
512{
513 PREAMBLE(1, 1, 0, 0)
514
515 cairo_arc(cr, 0.5, 0.5, 0.45, 0, 2 * M_PI);
516 cairo_fill(cr);
517 cairo_set_source_rgba(cr, 0.2, 0.2, 0.2, 1.0);
518
519 if((flags & CPF_ACTIVE))
520 {
521 cairo_move_to(cr, 0.5, 0.25);
522 cairo_line_to(cr, 0.5, 0.75);
523 cairo_move_to(cr, 0.25, 0.5);
524 cairo_line_to(cr, 0.75, 0.5);
525 cairo_stroke(cr);
526 }
527 else
528 {
529 cairo_move_to(cr, 0.25, 0.5);
530 cairo_line_to(cr, 0.75, 0.5);
531 cairo_stroke(cr);
532 }
533
535
536 FINISH
537}
538
539void dtgtk_cairo_paint_square_plus(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
540{
541 PREAMBLE(1, 1, 0, 0)
542
544 cairo_fill(cr);
545
546 cairo_set_source_rgba(cr, 0.2, 0.2, 0.2, 1.0);
547 cairo_move_to(cr, 0.5, 0.25);
548 cairo_line_to(cr, 0.5, 0.75);
549 cairo_move_to(cr, 0.25, 0.5);
550 cairo_line_to(cr, 0.75, 0.5);
551 cairo_stroke(cr);
552
553 FINISH
554}
555
556void dtgtk_cairo_paint_sorting(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
557{
558 PREAMBLE(1, 1, 0, 0)
559
560 cairo_move_to(cr, 0.4, 0.1);
561 cairo_line_to(cr, 0.4, 0.9);
562 cairo_line_to(cr, 0.2, 0.7);
563 cairo_move_to(cr, 0.6, 0.9);
564 cairo_line_to(cr, 0.6, 0.1);
565 cairo_line_to(cr, 0.8, 0.3);
566 cairo_stroke(cr);
567
568 FINISH
569}
570
571void dtgtk_cairo_paint_plus_simple(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
572{
573 PREAMBLE(1, 1, 0, 0)
574
575 cairo_move_to(cr, 0.5, 0.1);
576 cairo_line_to(cr, 0.5, 0.9);
577 cairo_move_to(cr, 0.1, 0.5);
578 cairo_line_to(cr, 0.9, 0.5);
579 cairo_stroke(cr);
580
581 FINISH
582}
583
584void dtgtk_cairo_paint_minus_simple(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
585{
586 PREAMBLE(1, 1, 0, 0)
587
588 cairo_move_to(cr, 0.1, 0.5);
589 cairo_line_to(cr, 0.9, 0.5);
590 cairo_stroke(cr);
591
592 FINISH
593}
594
595void dtgtk_cairo_paint_multiply_small(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
596{
597 PREAMBLE(1, 1, 0, 0)
598
599 cairo_move_to(cr, 0.3, 0.3);
600 cairo_line_to(cr, 0.7, 0.7);
601 cairo_move_to(cr, 0.7, 0.3);
602 cairo_line_to(cr, 0.3, 0.7);
603 cairo_stroke(cr);
604
605 FINISH
606}
607
608void dtgtk_cairo_paint_treelist(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
609{
610 PREAMBLE(1, 1, 0, 0)
611
612 cairo_move_to(cr, 0.05, 0.05);
613 cairo_line_to(cr, 0.125, 0.05);
614 cairo_move_to(cr, 0.25, 0.35);
615 cairo_line_to(cr, 0.325, 0.35);
616 cairo_move_to(cr, 0.45, 0.65);
617 cairo_line_to(cr, 0.525, 0.65);
618 cairo_move_to(cr, 0.25, 0.95);
619 cairo_line_to(cr, 0.325, 0.95);
620 cairo_stroke(cr);
621
622 cairo_move_to(cr, 0.35, 0.05);
623 cairo_line_to(cr, 0.95, 0.05);
624 cairo_move_to(cr, 0.55, 0.35);
625 cairo_line_to(cr, 0.95, 0.35);
626 cairo_move_to(cr, 0.75, 0.65);
627 cairo_line_to(cr, 0.95, 0.65);
628 cairo_move_to(cr, 0.55, 0.95);
629 cairo_line_to(cr, 0.95, 0.95);
630 cairo_stroke(cr);
631
632 FINISH
633}
634
635void dtgtk_cairo_paint_invert(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
636{
637 PREAMBLE(0.95, 1, 0, 0)
638
640 cairo_arc(cr, 0.5, 0.5, 0.46, 0, 2.0 * M_PI);
641 cairo_stroke(cr);
642 cairo_arc(cr, 0.5, 0.5, 0.46, 3.0 * M_PI / 2.0, M_PI / 2.0);
643 cairo_fill(cr);
644
645 FINISH
646}
647
648void dtgtk_cairo_paint_masks_edit(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
649{
650 PREAMBLE(1, 1, 0, 0)
651
652 // Draw in a SOURCE group so overlapping strokes don't accumulate alpha.
656
657 // Curve line
658 cairo_move_to(cr, 1., 0.4);
659 cairo_curve_to(cr, 0.9, -0.1, 0.4, 0.1, 0., 0.5);
660 cairo_stroke(cr);
661 // Node
662 cairo_arc(cr, 0.35, 0.20, 0.1, 0, 2 * M_PI);
663 cairo_fill(cr);
664 // Cursor arrow
665 _paint_cursor_arrow(cr, 0.4, 0.35, 0.7);
666
669 cairo_paint(cr);
670
671 FINISH
672}
673
674void dtgtk_cairo_paint_masks_circle(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
675{
676 PREAMBLE(1, 1, 0, 0)
677
678 // Draw in a SOURCE group so overlapping strokes don't accumulate alpha.
682
683 cairo_arc(cr, 0.5, 0.5, 0.5, 0, 2.0 * M_PI);
684 cairo_stroke(cr);
685
686 // Add a center control node
687 cairo_arc(cr, 0.5, 0.5, 0.075, 0, 2 * M_PI);
688 cairo_fill(cr);
689
690 // Add an edge control node
691 cairo_arc(cr, 1., 0.5, 0.075, 0, 2 * M_PI);
692 cairo_fill(cr);
693
696 cairo_paint(cr);
697
698 FINISH
699}
700
709void dtgtk_cairo_paint_masks_ellipse(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
710{
711 PREAMBLE(1, 1, 0, 0)
712
713 // Draw in a SOURCE group so overlapping strokes don't accumulate alpha.
714
718
719 const double scale_x = 0.95 / sqrt(2.0);
720 const double scale_y = 0.95;
721 // Pick the radius so the rotated ellipse's axis-aligned bbox has half-extent 0.5.
722 const double radius = sqrt(0.5 / (scale_x * scale_x + scale_y * scale_y));
723
724 cairo_save(cr);
725 cairo_translate(cr, 0.5, 0.5);
726 cairo_rotate(cr, M_PI_4);
728 cairo_arc(cr, 0.0, 0.0, radius, 0.0, 2.0 * M_PI);
729 cairo_restore(cr);
730 cairo_stroke(cr);
731
732 // Add a center control node
733 cairo_arc(cr, 0.5, 0.5, 0.075, 0, 2 * M_PI);
734 cairo_fill(cr);
735
736 // Add an edge control node
737 const double c = M_SQRT1_2; // 1/sqrt(2)
738
739 const double major_x = 0.5 + scale_y * radius * c;
740 const double major_y = 0.5 - scale_y * radius * c;
741 cairo_arc(cr, major_x, major_y, 0.075, 0, 2 * M_PI);
742 cairo_fill(cr);
743
744 const double minor_x = 0.5 + scale_x * radius * c;
745 const double minor_y = 0.5 + scale_x * radius * c;
746 cairo_arc(cr, minor_x, minor_y, 0.075, 0, 2 * M_PI);
747 cairo_fill(cr);
748
751 cairo_paint(cr);
752
753 FINISH
754}
755
756void dtgtk_cairo_paint_masks_gradient(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
757{
758 PREAMBLE(1, 1, 0, 0)
759
760 cairo_save(cr);
761
763 double r = 0.7, g = 0.7, b = 0.7, a = 1.0;
764 if(cairo_pattern_get_rgba(src, &r, &g, &b, &a) != CAIRO_STATUS_SUCCESS)
765 {
766 /* fallback */
767 r = g = b = 0.7;
768 a = 1.0;
769 }
770
771 cairo_pattern_t *pat = cairo_pattern_create_linear(0.0, 1.0, 1.0, 0.0);
772 cairo_pattern_add_color_stop_rgba(pat, 0.33, r, g, b, 0.3);
774 cairo_rectangle(cr, 0.0, 0.0, 1, 1);
776 cairo_fill(cr);
778 cairo_restore(cr);
779
780 const double line_width = cairo_get_line_width(cr);
781 const double thick_width = line_width * 2.;
782 const double triangle_size = 0.4;
783 const double triangle_width = 0.66 * triangle_size;
784 const double triangle_height = triangle_size;
785
786 // Angle pointed by the triangle tip (radians).
787 const double angle = -M_PI_4;
788 const double half_width = triangle_width * 0.5;
789 const double tip_x = cos(angle);
790 const double tip_y = sin(angle);
791 const double base_x = -tip_y;
792 const double base_y = tip_x;
793
794 // Offset center so the triangle centroid stays at (0.5, 0.5).
795 const double center_x = 0.5 - triangle_height * tip_x / 3.0;
796 const double center_y = 0.5 - triangle_height * tip_y / 3.0;
797
798 cairo_move_to(cr, center_x - half_width * base_x, center_y - half_width * base_y);
799 cairo_line_to(cr, center_x + half_width * base_x, center_y + half_width * base_y);
800 cairo_line_to(cr, center_x + triangle_height * tip_x, center_y + triangle_height * tip_y);
802
803 cairo_fill(cr);
804
805 // Clip to avoid lines to bleed outside of the gradient
806 cairo_rectangle(cr, 0.0, 0.0, 1, 1);
807 cairo_clip(cr);
808
809 double pattern[2] = {0.1f, 0.2f};
810 cairo_set_dash(cr, pattern, 2, 0);
811
812 cairo_move_to(cr, 0.5, 0.);
813 cairo_line_to(cr, 1., 0.5);
814
815 cairo_move_to(cr, 0., 0.5);
816 cairo_line_to(cr, 0.5, 1.);
817
819 cairo_stroke(cr);
820
821 FINISH
822}
823
824void dtgtk_cairo_paint_masks_polygon(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
825{
826 PREAMBLE(1, 1, 0, 0)
827
828 // Draw in a SOURCE group so overlapping strokes don't accumulate alpha.
832
833 const double nodes[5][2] =
834 {
835 {0.075, 0.50},
836 {0.375, 0.10},
837 {0.925, 0.30},
838 {0.75, 0.883},
839 {0.225, 0.925}
840 };
841
842 const int points_type[5] = {1, 0, 1, 1, 1}; // 0 for line, 1 for curve
843
844 cairo_move_to(cr, nodes[0][0], nodes[0][1]);
845 cairo_line_to(cr, nodes[1][0], nodes[1][1]);
846 cairo_line_to(cr, nodes[2][0], nodes[2][1]);
847 cairo_curve_to(cr, 0.95, 0.60, 0.75, 0.90, nodes[3][0], nodes[3][1]);
848 cairo_curve_to(cr, 0.60, 0.7, 0.5, 0.75, nodes[4][0], nodes[4][1]);
849 cairo_curve_to(cr, 0.05, 0.70, 0.05, 0.80, nodes[0][0], nodes[0][1]);
850 cairo_stroke(cr);
851
852 for (int i = 0; i < 5; i++)
853 {
854 const float radius = 0.075;
855 if(!points_type[i])
856 {
857 const float length = radius * 0.7071f;
858 cairo_rectangle(cr, nodes[i][0] - length, nodes[i][1] - length, 2 * length, 2 * length);
859 }
860 else
861 cairo_arc(cr, nodes[i][0], nodes[i][1], radius, 0, 2 * M_PI);
863 cairo_stroke(cr);
864 }
865
868 cairo_paint(cr);
869
870 FINISH
871}
872
873void dtgtk_cairo_paint_masks_vertgradient(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
874{
875 PREAMBLE(1, 1, 0, 0)
876
877 cairo_rectangle(cr, 0.1, 0.1, 0.9, 0.9);
880 pat = cairo_pattern_create_linear(0.1, 0.5, 0.9, 0.5);
881 cairo_pattern_add_color_stop_rgba(pat, 0.1, 0.6, 0.6, 0.6, 0.9);
882 cairo_pattern_add_color_stop_rgba(pat, 1.0, 0.2, 0.2, 0.2, 0.9);
883 cairo_rectangle(cr, 0.1, 0.1, 0.8, 0.8);
885 cairo_fill(cr);
887
888 FINISH
889}
890
891void dtgtk_cairo_paint_masks_brush_and_inverse(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
892{
893 PREAMBLE(1, 1, 0, 0)
894
895 cairo_arc(cr, 0.5, 0.5, 0.4, 0, 2.0 * M_PI);
896 cairo_stroke(cr);
897 cairo_arc(cr, 0.5, 0.5, 0.4, 3.0 * M_PI / 2.0, M_PI / 2.0);
898 cairo_fill(cr);
899
900 cairo_move_to(cr, -0.05, 1.0);
901 cairo_arc_negative(cr, 0.25, 0.85, 0.15, 0.5 * M_PI, 1.12 * M_PI);
902 cairo_arc(cr, -0.236, 0.72, 0.35, 0.08 * M_PI, 0.26 * M_PI);
904 cairo_fill(cr);
905
906 cairo_set_line_width(cr, 0.01);
907 cairo_arc(cr, 0.98, 0.0, 0.055, 1.2 * M_PI, 0.2 * M_PI);
908 cairo_arc(cr, 0.48, 0.72, 0.09, 0.2 * M_PI, 1.2 * M_PI);
910 cairo_stroke(cr);
911
912 FINISH
913}
914
915void dtgtk_cairo_paint_masks_brush(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
916{
917 PREAMBLE(1, 1, 0, 0)
918
919 // Draw in a SOURCE group so overlapping strokes don't accumulate alpha.
923
924 //_draw_shape_plus_sign(cr);
925
926 const double nodes[3][2] = {{0.1, 0.90},
927 {0.5, 0.5},
928 {0.9, 0.1}};
929
930 cairo_move_to(cr, nodes[0][0], nodes[0][1]);
931 cairo_curve_to(cr, 0.00, 0.75, 0.1, 0.18, nodes[1][0], nodes[1][1]);
932 cairo_curve_to(cr, 0.82, 0.7, 0.8, 0.2, nodes[2][0], nodes[2][1]);
933 cairo_stroke(cr);
934
935 for(int i = 0; i < 3; i++)
936 {
937 cairo_arc(cr, nodes[i][0], nodes[i][1], 0.075, 0, 2 * M_PI);
939 cairo_stroke(cr);
940 }
941
942 //cairo_rectangle(cr, 0.0, 0.0, 1, 1);
943 //cairo_stroke(cr);
944
947 cairo_paint(cr);
948
949 FINISH
950}
951
952void dtgtk_cairo_paint_masks_uniform(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
953{
954 PREAMBLE(0.95, 1, 0, 0)
955
956 cairo_arc(cr, 0.5, 0.5, 0.5, -M_PI, M_PI);
957 cairo_stroke(cr);
958
959 FINISH
960}
961
962void dtgtk_cairo_paint_masks_drawn(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
963{
964 PREAMBLE(0.9, 1, 0, 0)
965
966 // main cylinder
967 cairo_move_to(cr, 1.0, 1.0);
968 cairo_line_to(cr, 0.9, 0.7);
969 cairo_line_to(cr, 0.2, 0.0);
970 cairo_line_to(cr, 0.0, 0.2);
971 cairo_line_to(cr, 0.7, 0.9);
972 cairo_line_to(cr, 1.0, 1.0);
973 cairo_stroke(cr);
974
975 // line
976 cairo_move_to(cr, 0.8, 0.8);
977 cairo_line_to(cr, 0.15, 0.15);
978 cairo_stroke(cr);
979
980 // junction
981 cairo_move_to(cr, 0.9, 0.7);
982 cairo_line_to(cr, 0.7, 0.9);
983 cairo_stroke(cr);
984
985 // tip
986 cairo_move_to(cr, 1.05, 1.05);
987 cairo_line_to(cr, 0.95, 0.95);
988 cairo_stroke(cr);
989
990 FINISH
991}
992
995void _gradient_arc(cairo_t *cr, double lw, int nb_steps, double x_center, double y_center, double radius,
996 double angle_from, double angle_to, double color_from, double color_to, double alpha)
997{
999
1000 double *portions = malloc(sizeof(double) * (1 + nb_steps));
1001
1002 // note: cairo angles seems to be shifted by M_PI relatively to the unit circle
1005 double step = (angle_to - angle_from) / nb_steps;
1006 for(int i = 0; i < nb_steps; i++) portions[i] = angle_from + i * step;
1008
1009 for(int i = 0; i < nb_steps; i++)
1010 {
1011 double color = color_from + i * (color_to - color_from) / nb_steps;
1012 cairo_set_source_rgba(cr, color, color, color, alpha);
1013 cairo_arc(cr, x_center, y_center, radius, portions[i], portions[i + 1]);
1014 cairo_stroke(cr);
1015 }
1017}
1018
1019void dtgtk_cairo_paint_masks_parametric(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1020{
1021 PREAMBLE(0.95, 1, 0, 0)
1022
1024 double r, g, b, a;
1025 double start;
1026 cairo_pattern_get_rgba (p, &r, &g, &b, &a);
1027
1028 start = ((flags & CPF_PRELIGHT) && (r < 0.5)) ? 0.8 : r / 4.0;
1029 _gradient_arc(cr, 0.125, 16, 0.5, 0.5, 0.5, -M_PI / 3.0, M_PI + M_PI / 3.0, start, r, a);
1030
1031 // draw one tick up right
1032 cairo_move_to(cr, 1, 0.2);
1033 cairo_line_to(cr, 1.2, 0.2);
1034 cairo_line_to(cr, 1.1, 0.0);
1035 cairo_fill(cr);
1036 // draw another tick center right
1037 cairo_move_to(cr, 1.1, 0.6);
1038 cairo_line_to(cr, 1.325, 0.55);
1039 cairo_line_to(cr, 1.275, 0.75);
1040 cairo_fill(cr);
1041
1042 FINISH
1043}
1044
1045void dtgtk_cairo_paint_masks_drawn_and_parametric(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags,
1046 void *data)
1047{
1048 PREAMBLE(1.05, 1, -0.1, -0.05)
1049
1051 double r, g, b, a;
1052 double start;
1053 cairo_pattern_get_rgba (p, &r, &g, &b, &a);
1054
1055 start = ((flags & CPF_PRELIGHT) && (r < 0.5)) ? 0.8 : r / 4.0;
1056 cairo_save(cr);
1057 _gradient_arc(cr, 0.125, 16, 0.75, 0.6, 0.4, -M_PI / 3.0, M_PI + M_PI / 3.0, start, r, a);
1058
1059 // draw one tick up right
1060 cairo_move_to(cr, 1.2, 0.35);
1061 cairo_line_to(cr, 1.35, 0.35);
1062 cairo_line_to(cr, 1.275, 0.15);
1063 cairo_fill(cr);
1064 // draw another tick center right
1065 cairo_move_to(cr, 1.25, 0.7);
1066 cairo_line_to(cr, 1.4, 0.6);
1067 cairo_line_to(cr, 1.4, 0.8);
1068 cairo_fill(cr);
1069 cairo_restore(cr);
1070
1071 cairo_scale(cr, 0.8, 0.8);
1072 cairo_translate(cr, 0.05, -0.05);
1073
1074 // main cylinder
1075 cairo_move_to(cr, 1.0, 1.0);
1076 cairo_line_to(cr, 0.9, 0.7);
1077 cairo_line_to(cr, 0.2, 0.0);
1078 cairo_line_to(cr, 0.0, 0.2);
1079 cairo_line_to(cr, 0.7, 0.9);
1080 cairo_line_to(cr, 1.0, 1.0);
1081 cairo_stroke(cr);
1082
1083 // line
1084 cairo_move_to(cr, 0.8, 0.8);
1085 cairo_line_to(cr, 0.25, 0.25);
1086 cairo_stroke(cr);
1087
1088 // junction
1089 cairo_move_to(cr, 0.9, 0.7);
1090 cairo_line_to(cr, 0.7, 0.9);
1091 cairo_stroke(cr);
1092
1093 // tip
1094 cairo_move_to(cr, 1.05, 1.05);
1095 cairo_line_to(cr, 0.95, 0.95);
1096 cairo_stroke(cr);
1097
1098 FINISH
1099}
1100
1101void dtgtk_cairo_paint_masks_raster(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1102{
1103 PREAMBLE(1, 1, 0, 0)
1104
1105 cairo_arc(cr, 0.5, 0.5, 0.5, 0, 2 * M_PI);
1106 cairo_clip(cr);
1107 cairo_new_path(cr);
1108
1109 for(int i = 0; i < 4; i++)
1110 for(int j = 0; j < 4; j++)
1111 if((i + j) % 2)
1112 {
1113 cairo_rectangle(cr, i / 4.0, j / 4.0, 1.0 / 4.0, 1.0 / 4.0);
1114 cairo_fill(cr);
1115 }
1116
1117 FINISH
1118}
1119
1120void dtgtk_cairo_paint_masks_multi(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1121{
1122 PREAMBLE(1, 1, 0, 0)
1123
1124 cairo_arc(cr, 0.3, 0.3, 0.3, 0, 6.2832);
1125 cairo_stroke(cr);
1126 cairo_move_to(cr, 0.0, 1.0);
1127 cairo_curve_to(cr, 0.0, 0.5, 1.0, 0.6, 1.0, 0.0);
1128 cairo_stroke(cr);
1129
1130 FINISH
1131}
1132
1133void dtgtk_cairo_paint_masks_inverse(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1134{
1135 PREAMBLE(1, 1, 0, 0)
1136
1137 cairo_arc(cr, 0.5, 0.5, 0.46, 0, 2.0 * M_PI);
1138 cairo_stroke(cr);
1139 cairo_arc(cr, 0.5, 0.5, 0.46, 3.0 * M_PI / 2.0, M_PI / 2.0);
1140 cairo_fill(cr);
1141
1142 FINISH
1143}
1144
1145void dtgtk_cairo_paint_masks_union(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1146{
1147 // note : as the icon is not square, we don't want PREAMBLE macro
1148 // we want 2 round of radius R that intersect in the middle,
1149 // so the width needs R + R*0.8 + R*0.8 + R = R*3.6
1150 // with a safety belt of 5% to be sure the stroke is draw inside the area
1151 const float r = fminf(w / 3.6, h / 2.0) * 0.95;
1152 const float padding_left = (w - r * 3.6) / 2.0;
1153 cairo_arc(cr, padding_left + r, h / 2.0, r, 0, 2.0 * M_PI);
1154 cairo_arc(cr, padding_left + r * 2.6, h / 2.0, r, 0, 2.0 * M_PI);
1155 cairo_fill(cr);
1156}
1157
1158void dtgtk_cairo_paint_masks_intersection(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1159{
1160 // note : as the icon is not square, we don't want PREAMBLE macro
1161 // we want 2 round of radius R that intersect in the middle,
1162 // so the width needs R + R*0.8 + R*0.8 + R = R*3.6
1163 // with a safety belt of *0.95 to be sure the stroke is draw inside the area
1164 const float r = fminf(w / 3.6, h / 2.0) * 0.95;
1165 const float padding_left = (w - r * 3.6) / 2.0;
1166
1167 // we draw the outline of the 2 circles
1168 cairo_save(cr);
1170 cairo_arc(cr, padding_left + r, h / 2.0, r, 0, 2.0 * M_PI);
1171 cairo_stroke(cr);
1172 cairo_arc(cr, padding_left + r * 2.6, h / 2.0, r, 0, 2.0 * M_PI);
1173 cairo_stroke(cr);
1174 cairo_restore(cr);
1175
1176 // we draw the intersection of the 2 circles we slightly different radius so they are more visible
1177 cairo_push_group(cr);
1178 cairo_arc(cr, padding_left + r * 1.3, h / 2.0, r * 0.85, 0, 2.0 * M_PI);
1179 cairo_fill(cr);
1181 cairo_arc(cr, padding_left + r * 2.3, h / 2.0, r * 0.85, 0, 2.0 * M_PI);
1182 cairo_fill(cr);
1184 cairo_paint(cr);
1185}
1186
1187void dtgtk_cairo_paint_masks_difference(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1188{
1189 // note : as the icon is not square, we don't want PREAMBLE macro
1190 // we want 2 round of radius R that intersect in the middle,
1191 // so the width needs R + R*0.8 + R*0.8 + R = R*3.6
1192 // with a safety belt of *0.95 to be sure the stroke is draw inside the area
1193 const float r = fminf(w / 3.6, h / 2.0) * 0.95;
1194 const float padding_left = (w - r * 3.6) / 2.0;
1195
1196 // we draw and fill the first circle
1197 cairo_arc(cr, padding_left + r, h / 2.0, r, 0, 2.0 * M_PI);
1198 cairo_fill(cr);
1199
1200 // then erase the second circle
1202 cairo_arc(cr, padding_left + r * 2.6, h / 2.0, r, 0, 2.0 * M_PI);
1203 cairo_fill(cr);
1204
1205 // last we draw the outline of the second circle
1208 cairo_arc(cr, padding_left + r * 2.6, h / 2.0, r, 0, 2.0 * M_PI);
1209 cairo_stroke(cr);
1210}
1211
1212void dtgtk_cairo_paint_masks_exclusion(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1213{
1214 // note : as the icon is not square, we don't want PREAMBLE macro
1215 // we want 2 round of radius R that intersect in the middle,
1216 // so the width needs R + R*0.8 + R*0.8 + R = R*3.6
1217 // with a safety belt of *0.95 to be sure the stroke is draw inside the area
1218 const float r = fminf(w / 3.6, h / 2.0) * 0.95;
1219 const float padding_left = (w - r * 3.6) / 2.0;
1220
1221 // we draw the first circle without the excluded area
1222 cairo_save(cr);
1224 cairo_arc(cr, padding_left + r, h / 2.0, r, 0, 2.0 * M_PI);
1225 cairo_fill(cr);
1227 cairo_arc(cr, padding_left + r * 2.3, h / 2.0, r * 0.85, 0, 2.0 * M_PI);
1228 cairo_fill(cr);
1229 cairo_restore(cr);
1230
1231 // same for the second circle
1232 cairo_push_group(cr);
1233 cairo_arc(cr, padding_left + r * 2.6, h / 2.0, r, 0, 2.0 * M_PI);
1234 cairo_fill(cr);
1236 cairo_arc(cr, padding_left + r * 1.3, h / 2.0, r * 0.85, 0, 2.0 * M_PI);
1237 cairo_fill(cr);
1239 cairo_paint(cr);
1240}
1241void dtgtk_cairo_paint_masks_used(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1242{
1243 PREAMBLE(1, 1, 0, 0)
1244
1245 cairo_arc(cr, 0.5, 0.5, 0.35, 0, 2.0 * M_PI);
1246 cairo_move_to(cr, 0.5, 0.15);
1247 cairo_line_to(cr, 0.5, 0.5);
1248 cairo_stroke(cr);
1249
1250 FINISH
1251}
1252
1253void dtgtk_cairo_paint_eye(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1254{
1255 dtgtk_cairo_paint_eye_toggle(cr, x, y, w, h, flags & ~CPF_ACTIVE, data);
1256}
1257
1258void dtgtk_cairo_paint_eye_toggle(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1259{
1260 PREAMBLE(1, 1, 0, 0)
1261
1262 cairo_save(cr);
1263 const double offset = 0.17;
1264 // Top
1265 cairo_arc(cr, 0.5, 0.5 + 0.3, 0.6, (1.0 + offset) * M_PI, (2.0 - offset) * M_PI);
1266 // Bottom
1267 cairo_arc(cr, 0.5, 0.5 - 0.3, 0.6, offset * M_PI, (1.0 - offset) * M_PI);
1268 cairo_close_path(cr);
1270
1271 // Iris
1272 const double iris_y = 0.45;
1273 cairo_arc(cr, 0.5, iris_y, 0.30, 0, 2 * M_PI);
1275 cairo_fill(cr);
1276 cairo_arc(cr, 0.5, iris_y, 0.10, 0, 2 * M_PI);
1277 cairo_fill(cr);
1278
1279 cairo_restore(cr);
1280
1281 if((flags & CPF_ACTIVE))
1282 {
1283 cairo_move_to(cr, 0.1, 0.9);
1284 cairo_line_to(cr, 0.9, 0.1);
1285 cairo_stroke(cr);
1286 }
1287
1288 FINISH
1289}
1290
1291void dtgtk_cairo_paint_timer(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1292{
1293 PREAMBLE(1, 1, 0, 0)
1294
1295 cairo_arc(cr, 0.5, 0.5, 0.5, (-80 * 3.145 / 180), (150 * 3.145 / 180));
1296 cairo_line_to(cr, 0.5, 0.5);
1297 cairo_stroke(cr);
1298
1299 FINISH
1300}
1301
1302void dtgtk_cairo_paint_grid(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1303{
1304 PREAMBLE(1, 1, 0, 0)
1305
1307
1308 // then create grid lines
1309 cairo_move_to(cr, 0.35, 0.15);
1310 cairo_line_to(cr, 0.35, 0.85);
1311 cairo_stroke(cr);
1312
1313 cairo_move_to(cr, 0.65, 0.15);
1314 cairo_line_to(cr, 0.65, 0.85);
1315 cairo_stroke(cr);
1316
1317 cairo_move_to(cr, 0.15, 0.35);
1318 cairo_line_to(cr, 0.85, 0.35);
1319 cairo_stroke(cr);
1320
1321 cairo_move_to(cr, 0.15, 0.65);
1322 cairo_line_to(cr, 0.85, 0.65);
1323 cairo_stroke(cr);
1324
1325 FINISH
1326}
1327
1328void dtgtk_cairo_paint_focus_peaking(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1329{
1330 PREAMBLE(1.2, 1, 0, 0)
1331
1332 // stigmometer aka split focusing screen aka Dodin's prism
1333 cairo_arc(cr, 0.5, 0.5, 0.2, 0, 2. * M_PI);
1334 cairo_move_to(cr, 0.3, 0.5);
1335 cairo_line_to(cr, 0.7, 0.5);
1336 cairo_stroke(cr);
1337
1338 // corners
1339 const double center = 0.5;
1340 const double width = 1.;
1341 const double height = width * 3. / 4.;
1342 const double offset_h = height / 2.;
1343 const double offset_w = width / 2.;
1344
1345 const double tick_length = 0.2;
1346 const double radius = 0.1;
1347
1348 const double left = center - offset_w;
1349 const double right = center + offset_w;
1350 const double top = center - offset_h;
1351 const double bottom = center + offset_h;
1352
1353 const double degrees = M_PI / 180.0;
1354
1356 cairo_move_to(cr, left, top + tick_length);
1357 cairo_arc (cr, left + radius, top + radius, radius, 180 * degrees, 270 * degrees);
1358 cairo_line_to(cr, left + tick_length, top);
1359 cairo_stroke(cr);
1360
1361 // south west
1362 cairo_move_to(cr, left + tick_length, bottom);
1363 cairo_arc (cr, left + radius, bottom - radius, radius, 90 * degrees, 180 * degrees);
1364 cairo_line_to(cr, left, bottom - tick_length);
1365 cairo_stroke(cr);
1366
1367 // south east
1368 cairo_move_to(cr, right, bottom - tick_length);
1369 cairo_arc (cr, right - radius, bottom - radius, radius, 0 * degrees, 90 * degrees);
1370 cairo_line_to(cr, right - tick_length, bottom);
1371 cairo_stroke(cr);
1372
1373 // north east
1374 cairo_move_to(cr, right - tick_length, top);
1375 cairo_arc (cr, right - radius, top + radius, radius, -90 * degrees, 0 * degrees);
1376 cairo_line_to(cr, right, top + tick_length);
1377 cairo_stroke(cr);
1378
1379 FINISH
1380}
1381
1382void dtgtk_cairo_paint_camera(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1383{
1384 PREAMBLE(1, 1, 0, 0)
1385
1386 // lens
1387 cairo_arc(cr, 0.5, 0.5, 0.2, 0, 2. * M_PI);
1388 cairo_stroke(cr);
1389 cairo_arc(cr, 0.5, 0.5, 0.1, M_PI, M_PI+M_PI_2);
1390 cairo_stroke(cr);
1391
1392 // body
1393
1394 cairo_move_to(cr, 0, 0.25);
1395 cairo_line_to(cr, 0, 0.85);
1396 cairo_line_to(cr, 0.95, 0.85);
1397 cairo_line_to(cr, 0.95, 0.25);
1398 cairo_line_to(cr, 0.75, 0.25);
1399 cairo_line_to(cr, 0.65, 0.15);
1400 cairo_line_to(cr, 0.35, 0.15);
1401 cairo_line_to(cr, 0.25, 0.25);
1402 cairo_close_path(cr);
1403 cairo_stroke(cr);
1404
1405 FINISH
1406}
1407
1408void dtgtk_cairo_paint_histogram_scope(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1409{
1410 PREAMBLE(1, 1, 0, 0)
1411
1412 cairo_move_to(cr, 0.0, 1.0);
1413 cairo_curve_to(cr, 0.3, 1.0, 0.3, 0.0, 0.5, 0.0);
1414 cairo_curve_to(cr, 0.7, 0.0, 0.7, 1.0, 1.0, 1.0);
1415 cairo_fill(cr);
1416
1417 FINISH
1418}
1419
1420void dtgtk_cairo_paint_waveform_scope(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1421{
1422 PREAMBLE(1, 1, 0, 0)
1423
1425 double r, g, b, a;
1426 cairo_pattern_get_rgba(p_src, &r, &g, &b, &a);
1427
1429 pat = cairo_pattern_create_linear(0.0, 0.0, 0.0, 1.0);
1430
1431 cairo_pattern_add_color_stop_rgba(pat, 0.0, r, g, b, a * 0.0);
1432 cairo_pattern_add_color_stop_rgba(pat, 0.1, r, g, b, a * 0.1);
1433 cairo_pattern_add_color_stop_rgba(pat, 0.5, r, g, b, a * 1.0);
1434 cairo_pattern_add_color_stop_rgba(pat, 0.6, r, g, b, a * 1.0);
1435 cairo_pattern_add_color_stop_rgba(pat, 1.0, r, g, b, a * 0.2);
1436
1437 cairo_rectangle(cr, 0.0, 0.0, 0.3, 0.9);
1438 cairo_set_source(cr, pat);
1439 cairo_fill(cr);
1440
1441 cairo_save(cr);
1442 cairo_scale(cr, 1.0, -1.0);
1443 cairo_translate(cr, 0.0, -1.0);
1444 cairo_rectangle(cr, 0.25, 0.0, 0.5, 1.0);
1445 cairo_set_source(cr, pat);
1446 cairo_fill(cr);
1447 cairo_restore(cr);
1448
1449 cairo_rectangle(cr, 0.7, 0.0, 0.3, 0.9);
1450 cairo_set_source(cr, pat);
1451 cairo_fill(cr);
1452
1454
1455 FINISH
1456}
1457
1458void dtgtk_cairo_paint_vectorscope(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1459{
1460 PREAMBLE(1, 1, 0, 0)
1461
1462 cairo_move_to(cr, 0.0, 0.3);
1463 cairo_curve_to(cr, 0.1, 0.0, 0.7, 0.3, 1.0, 0.7);
1464 cairo_curve_to(cr, 0.9, 0.8, 0.1, 0.8, 0.0, 0.3);
1465 cairo_fill(cr);
1466
1467 FINISH
1468}
1469
1470void dtgtk_cairo_paint_linear_scale(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1471{
1472 PREAMBLE(1, 1, 0, 0)
1473
1474 cairo_move_to(cr, 0.0, 1.0);
1475 cairo_line_to(cr, 1.0, 0.0);
1476 cairo_stroke(cr);
1477
1478 FINISH
1479}
1480
1481void dtgtk_cairo_paint_logarithmic_scale(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1482{
1483 PREAMBLE(1, 1, 0, 0)
1484
1485 cairo_move_to(cr, 0.0, 1.0);
1486 cairo_curve_to(cr, 0.0, 0.33, 0.66, 0.0, 1.0, 0.0);
1487 cairo_stroke(cr);
1488
1489 FINISH
1490}
1491
1492void dtgtk_cairo_paint_waveform_overlaid(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1493{
1494 PREAMBLE(1, 1, 0, 0)
1495
1497 double r, g, b, a;
1498 cairo_pattern_get_rgba(p_src, &r, &g, &b, &a);
1499
1501 pat = cairo_pattern_create_linear(0.0, 0.0, 0.0, 1.0);
1502
1503 cairo_pattern_add_color_stop_rgba(pat, 0.0, r, g * 0.7, b * 0.9, a * 0.2);
1504 cairo_pattern_add_color_stop_rgba(pat, 0.4, r * 0.9, g, b * 0.9, a * 0.8);
1505 cairo_pattern_add_color_stop_rgba(pat, 0.7, r, g * 0.9, b, a * 1.0);
1506 cairo_pattern_add_color_stop_rgba(pat, 1.0, r * 0.7, g * 0.5, b, a * 0.2);
1507
1508 cairo_rectangle(cr, 0.0, 0.15, 1.0, 0.7);
1509 cairo_set_source(cr, pat);
1510 cairo_fill(cr);
1511
1513
1514 FINISH
1515}
1516
1517void dtgtk_cairo_paint_rgb_parade(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1518{
1519 PREAMBLE(1, 1, 0, 0)
1520
1522
1523 pat = cairo_pattern_create_linear(0.0, 0.0, 0.0, 1.0);
1524 cairo_pattern_add_color_stop_rgba(pat, 0.0, 0.8, 0.3, 0.3, 0.2);
1525 cairo_pattern_add_color_stop_rgba(pat, 0.4, 0.8, 0.3, 0.3, 0.7);
1526 cairo_pattern_add_color_stop_rgba(pat, 1.0, 0.8, 0.3, 0.3, 0.3);
1527 cairo_rectangle(cr, 0.0, 0.1, 1.0/3.0, 0.7);
1528 cairo_set_source(cr, pat);
1529 cairo_fill(cr);
1531
1532 pat = cairo_pattern_create_linear(0.0, 0.0, 0.0, 1.0);
1533 cairo_pattern_add_color_stop_rgba(pat, 0.0, 0.4, 0.8, 0.4, 0.1);
1534 cairo_pattern_add_color_stop_rgba(pat, 0.6, 0.4, 0.8, 0.4, 0.8);
1535 cairo_pattern_add_color_stop_rgba(pat, 1.0, 0.4, 0.8, 0.4, 0.4);
1536 cairo_rectangle(cr, 1.0/3.0, 0.2, 1.0/3.0, 0.7);
1537 cairo_set_source(cr, pat);
1538 cairo_fill(cr);
1540
1541 pat = cairo_pattern_create_linear(0.0, 0.0, 0.0, 1.0);
1542 cairo_pattern_add_color_stop_rgba(pat, 0.0, 0.4, 0.4, 0.8, 0.4);
1543 cairo_pattern_add_color_stop_rgba(pat, 0.5, 0.4, 0.4, 0.8, 0.9);
1544 cairo_pattern_add_color_stop_rgba(pat, 1.0, 0.4, 0.4, 0.8, 0.5);
1545 cairo_rectangle(cr, 2.0/3.0, 0.1, 1.0/3.0, 0.7);
1546 cairo_set_source(cr, pat);
1547 cairo_fill(cr);
1549
1550 FINISH
1551}
1552
1553void dtgtk_cairo_paint_luv(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1554{
1555 PREAMBLE(1, 1, 0, 0)
1556
1557 // FIXME: change icon to "u*v*"
1558 cairo_move_to(cr, 0.0, 0.0);
1559 cairo_line_to(cr, 0.0, 1.0);
1560 cairo_line_to(cr, 0.7, 1.0);
1561 cairo_stroke(cr);
1562
1563 cairo_move_to(cr, 0.5, 0.0);
1564 cairo_curve_to(cr, 0.5, 0.4, 1.0, 0.4, 1.0, 0.0);
1565 cairo_stroke(cr);
1566
1567 cairo_move_to(cr, 0.5, 0.5);
1568 cairo_line_to(cr, 0.75, 0.8);
1569 cairo_line_to(cr, 1.0, 0.5);
1570 cairo_stroke(cr);
1571
1572 FINISH
1573}
1574
1575void dtgtk_cairo_paint_jzazbz(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1576{
1577 PREAMBLE(1, 1, 0, 0)
1578
1579 // FIXME: change icon to "AzBz" or just "z"
1580 cairo_move_to(cr, 0.4, 0.0);
1581 cairo_curve_to(cr, 0.45, 1.0, 0.1, 1.0, 0.0, 0.8);
1582 cairo_stroke(cr);
1583
1584 cairo_move_to(cr, 0.6, 0.5);
1585 cairo_line_to(cr, 1.0, 0.5);
1586 cairo_line_to(cr, 0.6, 1.0);
1587 cairo_line_to(cr, 1.0, 1.0);
1588 cairo_stroke(cr);
1589
1590 FINISH
1591}
1592
1593void dtgtk_cairo_paint_ryb(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1594{
1595 PREAMBLE(1.2, 1, -0.05, -0.05)
1596
1597 cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 0.8);
1598 cairo_arc(cr, 0.5, 0.5, 0.5, -0.83333 * M_PI, -0.16667 * M_PI);
1599 cairo_line_to(cr, 0.5, 0.5);
1600 cairo_close_path(cr);
1601 cairo_fill(cr);
1602 cairo_stroke(cr);
1603
1604 cairo_set_source_rgba(cr, 1.0, 1.0, 0.0, 0.8);
1605 cairo_arc(cr, 0.5, 0.5, 0.5, 0.5 * M_PI, -0.83333 * M_PI);
1606 cairo_line_to(cr, 0.5, 0.5);
1607 cairo_close_path(cr);
1608 cairo_fill(cr);
1609 cairo_stroke(cr);
1610
1611 cairo_set_source_rgba(cr, 0.0, 0.0, 1.0, 0.8);
1612 cairo_arc(cr, 0.5, 0.5, 0.5, -0.16667 * M_PI, 0.5 * M_PI);
1613 cairo_line_to(cr, 0.5, 0.5);
1614 cairo_close_path(cr);
1615 cairo_fill(cr);
1616 cairo_stroke(cr);
1617
1618 FINISH
1619}
1620
1621void dtgtk_cairo_paint_filmstrip(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1622{
1623 gdouble sw = 0.6;
1624 gdouble bend = 0.3;
1625
1626 PREAMBLE(1, 1, 0, 0)
1627
1628 cairo_scale(cr, 0.7, 0.7);
1629 cairo_translate(cr, 0.15, 0.15);
1630
1631 /* s curve left */
1632 cairo_move_to(cr, 0.0, 1.0);
1633 cairo_curve_to(cr, 0.0, 0.0 + bend, (1.0 - sw), 1.0 - bend, (1.0 - sw), 0.0);
1634 cairo_stroke(cr);
1635
1636 /* s curve down */
1637 cairo_move_to(cr, 1.0, 0.0);
1638 cairo_curve_to(cr, 1.0, 1.0 - bend, sw, 0.0 + bend, sw, 1.0);
1639 cairo_stroke(cr);
1640
1641 /* filmstrip start,stop and divider */
1642 cairo_move_to(cr, 0, 1.0);
1643 cairo_line_to(cr, sw, 1.0);
1644 cairo_stroke(cr);
1645 cairo_move_to(cr, 1 - sw, 0.0);
1646 cairo_line_to(cr, 1.0, 0.0);
1647 cairo_stroke(cr);
1648
1649 cairo_move_to(cr, 1 - sw, 0.5);
1650 cairo_line_to(cr, sw, 0.5);
1651 cairo_stroke(cr);
1652
1653 FINISH
1654}
1655
1656void dtgtk_cairo_paint_directory(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1657{
1658 PREAMBLE(1, 1, 0, 0);
1659
1660 const double degrees = M_PI / 180.0;
1661
1662 cairo_new_sub_path (cr);
1663 cairo_arc (cr, 0.85, 0.35, 0.1, -90 * degrees, 0 * degrees);
1664 cairo_arc (cr, 0.8, 0.75, 0.1, 0 * degrees, 90 * degrees);
1665 cairo_arc (cr, 0.2, 0.75, 0.1, 90 * degrees, 180 * degrees);
1666 cairo_arc (cr, 0.15, 0.35, 0.1, 180 * degrees, 270 * degrees);
1667 cairo_close_path (cr);
1668 cairo_stroke(cr);
1669
1670 cairo_move_to(cr, 0.1, 0.3);
1671 cairo_arc (cr, 0.2, 0.15, 0.1, 180 * degrees, 270 * degrees);
1672 cairo_arc (cr, 0.45, 0.15, 0.1, -90 * degrees, 0 * degrees);
1673 cairo_curve_to(cr, 0.6, 0.15, 0.75, 0.25, 0.9, 0.25);
1674 cairo_fill(cr);
1675
1676 FINISH
1677}
1678
1679void dtgtk_cairo_paint_refresh(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1680{
1681 PREAMBLE(1, 1, 0, 0)
1682
1683 if(flags & 1)
1684 {
1685 cairo_translate(cr, 1, 0);
1686 cairo_scale(cr, -1, 1);
1687 }
1688
1689 cairo_move_to(cr, 0.65, 0.1);
1690 cairo_line_to(cr, 0.5, 0.2);
1691 cairo_line_to(cr, 0.65, 0.3);
1692 cairo_stroke(cr);
1693
1694 cairo_arc(cr, 0.5, 0.5, 0.35, (-80 * 3.145 / 180), (220 * 3.145 / 180));
1695 cairo_stroke(cr);
1696
1697 FINISH
1698}
1699
1700void dtgtk_cairo_paint_perspective(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1701{
1702 PREAMBLE(1, 1, 0, 0)
1703
1704 if((flags & 3) == 1)
1705 {
1706 cairo_move_to(cr, 0.1, 0.9);
1707 cairo_line_to(cr, 0.3, 0.1);
1708 cairo_line_to(cr, 0.7, 0.1);
1709 cairo_line_to(cr, 0.9, 0.9);
1710 cairo_line_to(cr, 0.1, 0.9);
1711 cairo_stroke(cr);
1712 }
1713 else if((flags & 3) == 2)
1714 {
1715 cairo_move_to(cr, 0.1, 0.9);
1716 cairo_line_to(cr, 0.9, 0.7);
1717 cairo_line_to(cr, 0.9, 0.3);
1718 cairo_line_to(cr, 0.1, 0.1);
1719 cairo_line_to(cr, 0.1, 0.9);
1720 cairo_stroke(cr);
1721 }
1722 else if((flags & 3) == 3)
1723 {
1724 cairo_move_to(cr, 0.1, 0.9);
1725 cairo_line_to(cr, 0.9, 0.7);
1726 cairo_line_to(cr, 0.8, 0.2);
1727 cairo_line_to(cr, 0.3, 0.1);
1728 cairo_line_to(cr, 0.1, 0.9);
1729 cairo_stroke(cr);
1730 }
1731
1732 FINISH
1733}
1734
1735void dtgtk_cairo_paint_structure(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1736{
1737 PREAMBLE(1, 1, 0, 0)
1738
1739 cairo_move_to(cr, 0.1, 0.1);
1740 cairo_line_to(cr, 0.0, 0.9);
1741 cairo_stroke(cr);
1742 cairo_move_to(cr, 0.366, 0.1);
1743 cairo_line_to(cr, 0.33, 0.9);
1744 cairo_stroke(cr);
1745 cairo_move_to(cr, 0.633, 0.1);
1746 cairo_line_to(cr, 0.66, 0.9);
1747 cairo_stroke(cr);
1748 cairo_move_to(cr, 0.9, 0.1);
1749 cairo_line_to(cr, 1.0, 0.9);
1750 cairo_stroke(cr);
1751
1752 FINISH
1753}
1754
1755void dtgtk_cairo_paint_draw_structure(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1756{
1757 PREAMBLE(1, 1, 0, 0)
1758
1759 cairo_move_to(cr, 0.1, 0.1);
1760 cairo_line_to(cr, 0.1, 0.9);
1761 cairo_line_to(cr, 0.9, 0.9);
1762 cairo_line_to(cr, 0.9, 0.1);
1763 cairo_line_to(cr, 0.1, 0.1);
1764 cairo_stroke(cr);
1765
1766 cairo_arc(cr, 0.1, 0.1, 0.1, 0.0, 2 * M_PI);
1767 cairo_stroke(cr);
1768 cairo_arc(cr, 0.1, 0.9, 0.1, 0.0, 2 * M_PI);
1769 cairo_stroke(cr);
1770 cairo_arc(cr, 0.9, 0.9, 0.1, 0.0, 2 * M_PI);
1771 cairo_stroke(cr);
1772 cairo_arc(cr, 0.9, 0.1, 0.1, 0.0, 2 * M_PI);
1773 cairo_stroke(cr);
1774
1775 FINISH
1776}
1777
1778void dtgtk_cairo_paint_cancel(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1779{
1780 PREAMBLE(1, 1, 0, 0)
1781
1782 cairo_move_to(cr, 0.85, 0.15);
1783 cairo_line_to(cr, 0.15, 0.85);
1784 cairo_move_to(cr, 0.15, 0.15);
1785 cairo_line_to(cr, 0.85, 0.85);
1786 cairo_stroke(cr);
1787
1788 FINISH
1789}
1790
1791void dtgtk_cairo_paint_aspectflip(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1792{
1793 PREAMBLE(1, 1, 0, 0)
1794
1795 if(flags & 1)
1796 {
1797 cairo_translate(cr, 0, 1);
1798 cairo_scale(cr, 1, -1);
1799 }
1800
1801 cairo_move_to(cr, 0.65, 0.0);
1802 cairo_line_to(cr, 0.5, 0.05);
1803 cairo_line_to(cr, 0.6, 0.25);
1804 cairo_stroke(cr);
1805
1806 cairo_arc(cr, 0.5, 0.5, 0.45, (-80 * 3.145 / 180), (220 * 3.145 / 180));
1807 cairo_stroke(cr);
1808
1809 FINISH
1810}
1811
1812void dtgtk_cairo_paint_styles(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1813{
1814 PREAMBLE(0.5 * 1.1, 1, 0.5 + 0.06, 0.5 -0.10)
1815
1816 cairo_arc(cr, 0.250, 0.45, 0.5, 0.0, 2.0 * M_PI);
1817 cairo_stroke(cr);
1818 cairo_arc(cr, -0.58, 0.65, 0.30, 0.0, 2.0 * M_PI);
1819 cairo_stroke(cr);
1820 cairo_arc(cr, -0.38, -0.27, 0.4, 0.0, 2.0 * M_PI);
1821 cairo_stroke(cr);
1822
1823 /* if its a popup menu */
1824 if(flags)
1825 {
1826 cairo_move_to(cr, 0.475, -0.93);
1827 cairo_line_to(cr, 0.15, -0.20);
1828 cairo_line_to(cr, 0.85, -0.20);
1829 cairo_fill(cr);
1830 }
1831
1832 FINISH
1833}
1834
1835void dtgtk_cairo_paint_label(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1836{
1837 PREAMBLE(1, 1, 0, 0)
1838
1839 cairo_push_group(cr);
1840
1841 double r = 0.4;
1842
1843 /* fill base color */
1844 cairo_arc(cr, 0.5, 0.5, r, 0.0, 2.0 * M_PI);
1845
1846 const int color = (flags & 7);
1847
1849 {
1850 {
1851 const GdkRGBA *lbl = dt_widget_colorlabel(color);
1852 if(lbl) set_color(cr, *lbl);
1853 }
1854 }
1855 else
1856 {
1857 cairo_set_line_width(cr, 0.1);
1858 cairo_set_source_rgb(cr, 0.9, 0.9, 0.9);
1859 cairo_move_to(cr, 0.15, 0.85);
1860 cairo_line_to(cr, 0.85, 0.15);
1861 cairo_stroke(cr);
1862
1863 // then erase some parts around cross line
1865 cairo_set_line_width(cr, 0.05);
1866 cairo_move_to(cr, 0.1, 0.78);
1867 cairo_line_to(cr, 0.78, 0.15);
1868 cairo_move_to(cr, 0.20, 0.9);
1869 cairo_line_to(cr, 0.92, 0.15);
1870 cairo_set_source_rgba(cr, 0, 1.0, 0, 1.0);
1871 cairo_stroke(cr);
1872 }
1873 cairo_fill(cr);
1874
1876 cairo_paint(cr);
1877
1878 FINISH
1879}
1880
1881void dtgtk_cairo_paint_label_sel(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1882{
1883 PREAMBLE(1., 1, 0, 0)
1884
1885 const double r = 0.5;
1886 const int color = (flags & 7);
1887
1889 {
1890 // The palette is published by the theme; before that happens there is nothing to draw
1891 // with, so fall back rather than dereference NULL.
1892 const GdkRGBA *lbl = dt_widget_colorlabel(color);
1893 if(lbl) cairo_set_source_rgba(cr, lbl->red, lbl->green, lbl->blue, .7);
1894 else cairo_set_source_rgba(cr, 0.75, 0.75, 0.75, .7);
1895 }
1896 else
1897 {
1898 cairo_set_source_rgba(cr, 0.75, 0.75, 0.75, 1.0);
1899 }
1900
1901 /* then improve hover effect for same blue icon */
1902 if(flags & CPF_PRELIGHT)
1903 {
1905 }
1906
1908 {
1909 cairo_arc(cr, 0.5, 0.5, r, 0.0, 2.0 * M_PI);
1910 cairo_fill(cr);
1911 }
1912 else
1913 {
1914 cairo_arc(cr, 0.5, 0.5, r, 0.0, 2.0 * M_PI);
1915 cairo_stroke(cr);
1916 }
1917
1918 FINISH
1919}
1920
1921void dtgtk_cairo_paint_reject(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1922{
1923 PREAMBLE(0.95, 1, 0, 0)
1924
1925 // the reject icon
1926 cairo_arc(cr, 0.5, 0.5, 0.5, 0.0, 2.0 * M_PI);
1927 cairo_move_to(cr, 0.7, 0.3);
1928 cairo_line_to(cr, 0.3, 0.7);
1929 cairo_move_to(cr, 0.3, 0.3);
1930 cairo_line_to(cr, 0.7, 0.7);
1931
1933 {
1934 // that means the image is rejected, so we draw the cross in red bold
1935 cairo_set_source_rgb(cr, 1.0, 0, 0);
1936 }
1937
1938 cairo_stroke(cr);
1939
1940 FINISH
1941}
1942
1943void dtgtk_cairo_paint_remove(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1944{
1945 PREAMBLE(0.95, 1, 0, 0)
1946
1947 // the reject icon
1949 cairo_fill(cr);
1950
1951 cairo_set_source_rgba(cr, 0.2, 0.2, 0.2, 0.8);
1952 cairo_move_to(cr, 0.7, 0.3);
1953 cairo_line_to(cr, 0.3, 0.7);
1954 cairo_move_to(cr, 0.3, 0.3);
1955 cairo_line_to(cr, 0.7, 0.7);
1956 cairo_stroke(cr);
1957
1958 FINISH
1959}
1960
1961void dtgtk_cairo_paint_star(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1962{
1963 PREAMBLE(1, 1, 0, 0)
1964
1965 // we create the path
1966 dt_draw_star(cr, 1 / 2., 1. / 2., 1. / 2., 1. / 5.);
1967
1968 // we fill the star if needed (mouseover or activated)
1969 if(data)
1970 {
1971 GdkRGBA *bgc = (GdkRGBA *)data; // the inner star color is defined in data
1972 double r, g, b, a;
1974 {
1975 cairo_set_source_rgba(cr, bgc->red, bgc->green, bgc->blue, bgc->alpha);
1977 cairo_set_source_rgba(cr, r, g, b, a);
1978 }
1979 }
1980
1981 cairo_stroke(cr);
1982
1983 FINISH
1984}
1985
1986void dtgtk_cairo_paint_unratestar(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
1987{
1988 PREAMBLE(1, 1, 0, 0)
1989
1990 cairo_push_group(cr);
1991
1992 // we create the path
1993 dt_draw_star(cr, 1 / 2., 1. / 2., 1. / 2., 1. / 5.);
1994
1995 // we fill the star if needed (mouseover or activated)
1996 if(data)
1997 {
1998 GdkRGBA *bgc = (GdkRGBA *)data; // the inner star color is defined in data
1999 double r, g, b, a;
2001 {
2002 cairo_set_source_rgba(cr, bgc->red, bgc->green, bgc->blue, bgc->alpha);
2004 cairo_set_source_rgba(cr, r, g, b, a);
2005 }
2006 }
2007
2008 // we create the cross line
2009 cairo_move_to(cr, 0.05, 0.95);
2010 cairo_line_to(cr, 0.85, 0.0);
2011 cairo_stroke(cr);
2012
2013 // then erase some parts around cross line
2016 cairo_move_to(cr, 0.0, 0.88);
2017 cairo_line_to(cr, 0.78, 0.0);
2018 cairo_move_to(cr, 0.10, 1.0);
2019 cairo_line_to(cr, 0.92, 0.0);
2020 cairo_set_source_rgba(cr, 0, 1.0, 0, 1.0);
2021 cairo_stroke(cr);
2022
2024 cairo_paint(cr);
2025
2026 FINISH
2027}
2028
2029void dtgtk_cairo_paint_local_copy(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2030{
2031 PREAMBLE(1, 1, 0, 0)
2032 cairo_arc(cr, 0.5, 0.5, 0.25, 0, 2 * M_PI);
2033
2034 if(flags & CPF_ACTIVE)
2035 {
2036 cairo_stroke(cr);
2037 }
2038 else
2039 {
2040 cairo_fill(cr);
2041 }
2042
2043 FINISH
2044}
2045
2046void dtgtk_cairo_paint_altered(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2047{
2048 PREAMBLE(0.5, 1, 0.5, 0.5)
2049
2050 cairo_push_group(cr);
2051
2052 const float r = 1.;
2053 cairo_arc(cr, 0, 0, r, 0, 2.0f * M_PI);
2054
2056 cairo_fill(cr);
2057 else
2058 cairo_stroke(cr);
2059
2061 {
2063 cairo_set_source_rgb(cr, 0.45, 0.45, 0.45);
2064 }
2065
2066 const float dx = r * cosf(M_PI / 8.0f), dy = r * sinf(M_PI / 8.0f);
2067 cairo_move_to(cr, - dx, - dy);
2068 cairo_curve_to(cr, 0, -2.0 * dy, 0, 2.0 * dy, dx, dy);
2069 cairo_move_to(cr, -.2 * dx, .8 * dy);
2070 cairo_line_to(cr, -.8 * dx, .8 * dy);
2071 cairo_move_to(cr, .2 * dx, -.8 * dy);
2072 cairo_line_to(cr, .8 * dx, -.8 * dy);
2073 cairo_move_to(cr, .5 * dx, -.8 * dy - .3 * dx);
2074 cairo_line_to(cr, .5 * dx, -.8 * dy + .3 * dx);
2075 cairo_stroke(cr);
2076
2078 cairo_paint(cr);
2079
2080 FINISH
2081}
2082
2083void dtgtk_cairo_paint_unaltered(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2084{
2085 PREAMBLE(0.5, 1, 0.5, 0.5)
2086
2087 cairo_push_group(cr);
2088
2089 const float r = 1.;
2090 cairo_arc(cr, 0, 0, r, 0, 2.0f * M_PI);
2091
2093 cairo_fill(cr);
2094 else
2095 cairo_stroke(cr);
2096
2098 {
2100 cairo_set_source_rgb(cr, 0.45, 0.45, 0.45);
2101 }
2102
2103 cairo_move_to(cr, -1, 0);
2104 cairo_line_to(cr, 1, -0);
2105 cairo_stroke(cr);
2106
2108 cairo_paint(cr);
2109
2110 FINISH
2111}
2112
2113void dtgtk_cairo_paint_audio(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2114{
2115 PREAMBLE(1, 1, 0, 0)
2116
2117 cairo_rectangle(cr, 0.05, 0.4, 0.2, 0.2);
2118 cairo_move_to(cr, 0.25, 0.6);
2119 cairo_line_to(cr, 0.45, 0.77);
2120 cairo_line_to(cr, 0.45, 0.23);
2121 cairo_line_to(cr, 0.25, 0.4);
2122
2124 cairo_arc(cr, 0.2, 0.5, 0.45, -(35.0 / 180.0) * M_PI, (35.0 / 180.0) * M_PI);
2126 cairo_arc(cr, 0.2, 0.5, 0.6, -(35.0 / 180.0) * M_PI, (35.0 / 180.0) * M_PI);
2128 cairo_arc(cr, 0.2, 0.5, 0.75, -(35.0 / 180.0) * M_PI, (35.0 / 180.0) * M_PI);
2129
2130 cairo_stroke(cr);
2131
2132 FINISH
2133}
2134
2135void dtgtk_cairo_paint_label_flower(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2136{
2137 PREAMBLE(1, 1, 0, 0)
2138
2139 const float r = 0.18;
2140
2141 if(flags & (1 << DT_WIDGET_COLORLABEL_RED))
2142 {
2143 cairo_arc(cr, r, r, r, 0, 2.0f * M_PI);
2144 {
2146 if(lbl) set_color(cr, *lbl);
2147 }
2148 cairo_fill(cr);
2149 }
2150
2152 {
2153 cairo_arc(cr, 1.0 - r, r, r, 0, 2.0f * M_PI);
2154 {
2156 if(lbl) set_color(cr, *lbl);
2157 }
2158 cairo_fill(cr);
2159 }
2160
2162 {
2163 cairo_arc(cr, 0.5, 0.5, r, 0, 2.0f * M_PI);
2164 {
2166 if(lbl) set_color(cr, *lbl);
2167 }
2168 cairo_fill(cr);
2169 }
2170
2171 if(flags & (1 << DT_WIDGET_COLORLABEL_BLUE))
2172 {
2173 cairo_arc(cr, r, 1.0 - r, r, 0, 2.0f * M_PI);
2174 {
2176 if(lbl) set_color(cr, *lbl);
2177 }
2178 cairo_fill(cr);
2179 }
2180
2182 {
2183 cairo_arc(cr, 1.0 - r, 1.0 - r, r, 0, 2.0f * M_PI);
2184 {
2186 if(lbl) set_color(cr, *lbl);
2187 }
2188 cairo_fill(cr);
2189 }
2190
2191 FINISH
2192}
2193
2194void dtgtk_cairo_paint_colorpicker(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2195{
2196 PREAMBLE(1, 1, -0.05, 0.05)
2197
2198 // Draw in a SOURCE group so overlapping strokes don't accumulate alpha.
2200 cairo_push_group(cr);
2202
2203 if(flags & CPF_ALTER)
2204 {
2205 // plus sign
2206 dt_draw_plus_sign(cr, 0.18f, 0.18f, 0.18f, 1.0f);
2207 }
2208
2209 cairo_translate(cr, 0.5, 0.5);
2210 cairo_rotate(cr, M_PI * 0.2973);
2211 cairo_scale(cr, 1.04, 1.04);
2212 cairo_translate(cr, -0.5, -0.5);
2214
2215 // Shaft
2216 const float top_width = 0.25f;
2217 const float top_height = 0.15f;
2218 const float bottom_width = top_width * 1.5f;
2219 const float bottom_height = 0.13f;
2220
2221 const float x1 = 0.5f - top_width * 0.5f;
2222 const float y1 = 0.0f;
2223
2224 cairo_rectangle(cr, x1, y1, top_width, top_height);
2225 cairo_arc(cr, 0.5f, 0.0, top_width * 0.5, -M_PI, 0);
2226
2227 // Bottom rectangle with rounded top corners
2228 const float x3 = 0.5f - bottom_width * 0.5f;
2229 const float y3 = top_height;
2230 const float x4 = 0.5f + bottom_width * 0.5f;
2231 const float y4 = top_height + bottom_height;
2232 const float radius = 0.035f;
2233
2234 cairo_move_to(cr, x3 + radius, y3);
2235 cairo_line_to(cr, x4 - radius, y3);
2236 cairo_arc(cr, x4 - radius, y3 + radius, radius, -M_PI / 2, 0);
2237 cairo_line_to(cr, x4, y4);
2238 cairo_line_to(cr, x3, y4);
2239 cairo_line_to(cr, x3, y3 + radius);
2240 cairo_arc(cr, x3 + radius, y3 + radius, radius, M_PI, 3 * M_PI / 2);
2241 cairo_close_path(cr);
2242 cairo_fill(cr);
2243
2244 // Tube and tip
2245 const float tube_width = 0.2f - 0.07f;
2246 const float x5 = 0.5f - tube_width * 0.5f;
2247 const float x6 = 0.5f + tube_width * 0.5f;
2248
2249 // Liquid level
2250 const float center_y = 0.6f;
2251 const float offset_y = 0.088f;
2252 const float stem_start_y = y4 + 0.05f;
2253
2254 const float tip_radius = 0.0125f;
2255 const float tip_base = 0.85f;
2256 const float tip_shoulder = 0.95f;
2257 const float tip_y = 1.0f - tip_radius;
2258 const float tip_x_left = 0.5f - tip_radius;
2259 const float tip_x_right = 0.5f + tip_radius;
2260
2262 cairo_set_line_width(cr, 0.03);
2263
2264 // Tube sides
2266 cairo_line_to(cr, x5, center_y + offset_y);
2268 cairo_line_to(cr, x6, center_y - offset_y);
2269 cairo_stroke(cr);
2270
2271 // Liquid
2272 cairo_move_to(cr, x5, center_y + offset_y);
2279 cairo_line_to(cr, x6, center_y - offset_y);
2280 cairo_close_path(cr);
2282 cairo_fill(cr);
2283
2284 cairo_arc(cr, 0.5f, 1.0f - tip_radius, tip_radius, 0, M_PI);
2285 cairo_fill(cr);
2286
2289 cairo_paint(cr);
2290
2291 FINISH
2292}
2293
2294void dtgtk_cairo_paint_colorpicker_set_values(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2295{
2296 PREAMBLE(1, 1, 0, 0.05)
2297
2298 /* draw pipette */
2299
2300 // drop
2301 cairo_move_to(cr, 0., 1. - 0.0);
2302 cairo_line_to(cr, 0.08, 1. - 0.15);
2303 cairo_line_to(cr, 0.16, 1. - 0.0);
2304 cairo_arc(cr, 0.08, 1. - 0.15 + 0.1926, 0.090666667, -0.49, 3.63);
2305 cairo_fill(cr);
2306
2307 // plus sign
2308 cairo_move_to(cr, 0.18, 0.00);
2309 cairo_line_to(cr, 0.18, 0.36);
2310 cairo_stroke(cr);
2311 cairo_move_to(cr, 0.00, 0.18);
2312 cairo_line_to(cr, 0.36, 0.18);
2313 cairo_stroke(cr);
2314
2315 // cross line
2316 cairo_set_line_width(cr, 0.15);
2317 cairo_move_to(cr, 0.48, 1. - 0.831);
2318 cairo_line_to(cr, 0.739, 1. - 0.482);
2319
2320 // shaft
2321 cairo_move_to(cr, 0.124, 1. - 0.297);
2322 cairo_line_to(cr, 0.823, 1. - 0.814);
2323 cairo_stroke(cr);
2324
2325 // end
2326 cairo_set_line_width(cr, 0.35);
2327 cairo_move_to(cr, 0.823, 1. - 0.814);
2328 cairo_line_to(cr, 0.648, 1. - 0.685);
2329 cairo_stroke(cr);
2330
2331 FINISH
2332}
2333
2334void dtgtk_cairo_paint_showmask(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2335{
2336 PREAMBLE(1, 1, 0, 0)
2337
2338 /* draw circle */
2339 cairo_arc(cr, 0.5, 0.5, 0.35, -M_PI, M_PI);
2340
2341 /* draw rectangle */
2342 cairo_rectangle(cr, 0.0, 0.0, 1.0, 1.0);
2344 cairo_fill(cr);
2345 cairo_stroke(cr);
2346
2347 FINISH
2348}
2349
2350void dtgtk_cairo_paint_preferences(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2351{
2352 PREAMBLE(0.5 * 0.95, 1, 0.5, 0.5)
2353
2354 cairo_rotate(cr, M_PI / 12.);
2355
2356 const float big_r = 1.f;
2357 const float tin_r = 0.8f;
2358
2359 for(int i = 0; i < 12; i++)
2360 {
2361 const float radius = (i % 2 == 0) ? big_r : tin_r;
2362 cairo_arc(cr, 0.0, 0.0, radius, i * M_PI / 6., (i + 1) * M_PI / 6.);
2363 }
2364 cairo_close_path(cr);
2365 cairo_stroke(cr);
2366
2367 cairo_arc(cr, 0.0, 0.0, 0.3, 0, 2. * M_PI);
2368 cairo_stroke(cr);
2369
2370 FINISH
2371}
2372
2373void dtgtk_cairo_paint_overlays(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2374{
2375 PREAMBLE(0.5 * 1.03, 1, 0.5, 0.5)
2376
2377 dt_draw_star(cr, 0.0, 0.0, 1., 1.0/2.5);
2378 cairo_stroke(cr);
2379
2380 FINISH
2381}
2382
2383void dtgtk_cairo_paint_help(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2384{
2385 PREAMBLE(0.5 * 0.97, 1, 0.5, 0.5)
2386
2387 cairo_arc(cr, 0.0, -0.5, 0.4, - M_PI, 0.25 * M_PI);
2388 cairo_arc_negative(cr, 0.7, 0.4, 0.7, -0.75 * M_PI, - M_PI);
2389 cairo_stroke(cr);
2390 cairo_arc(cr, 0.0, 0.85, 0.05, 0.0, 2.0 * M_PI);
2391 cairo_stroke(cr);
2392
2393 FINISH
2394}
2395
2396void dtgtk_cairo_paint_grouping(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2397{
2398 PREAMBLE(1.15, 1, 0, 0)
2399
2400 cairo_move_to(cr, 0.30, 0.15);
2401 cairo_line_to(cr, 0.95, 0.15);
2402 cairo_line_to(cr, 0.95, 0.65);
2403 cairo_move_to(cr, 0.20, 0.25);
2404 cairo_line_to(cr, 0.85, 0.25);
2405 cairo_line_to(cr, 0.85, 0.75);
2406 cairo_stroke(cr);
2407 if(flags & CPF_ACTIVE)
2408 {
2409 cairo_rectangle(cr, 0.05, 0.35, 0.7, 0.5);
2410 cairo_fill(cr);
2411 }
2412 else
2413 {
2414 cairo_rectangle(cr, 0.05, 0.35, 0.7, 0.5);
2415 cairo_stroke(cr);
2416 }
2417
2418 FINISH
2419}
2420
2421void dtgtk_cairo_paint_alignment(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2422{
2423 PREAMBLE(1, 1, 0, 0)
2424
2425 switch(flags >> (int)log2(CPF_SPECIAL_FLAG))
2426 {
2427 case 1: // Top left
2428 cairo_move_to(cr, 0.9, 0.1);
2429 cairo_line_to(cr, 0.1, 0.1);
2430 cairo_line_to(cr, 0.1, 0.9);
2431 break;
2432
2433 case 2: // Top center
2434 cairo_move_to(cr, 0.1, 0.1);
2435 cairo_line_to(cr, 0.9, 0.1);
2436 break;
2437
2438 case 4: // Top right
2439 cairo_move_to(cr, 0.1, 0.1);
2440 cairo_line_to(cr, 0.9, 0.1);
2441 cairo_line_to(cr, 0.9, 0.9);
2442 break;
2443
2444 case 8: // left
2445 cairo_move_to(cr, 0.1, 0.1);
2446 cairo_line_to(cr, 0.1, 0.9);
2447 break;
2448
2449 case 16: // center
2450 cairo_move_to(cr, 0.1, 0.5);
2451 cairo_line_to(cr, 0.9, 0.5);
2452 cairo_move_to(cr, 0.5, 0.1);
2453 cairo_line_to(cr, 0.5, 0.9);
2454 break;
2455
2456 case 32: // right
2457 cairo_move_to(cr, 0.9, 0.1);
2458 cairo_line_to(cr, 0.9, 0.9);
2459 break;
2460
2461 case 64: // bottom left
2462 cairo_move_to(cr, 0.9, 0.9);
2463 cairo_line_to(cr, 0.1, 0.9);
2464 cairo_line_to(cr, 0.1, 0.1);
2465 break;
2466
2467 case 128: // bottom center
2468 cairo_move_to(cr, 0.1, 0.9);
2469 cairo_line_to(cr, 0.9, 0.9);
2470 break;
2471
2472 case 256: // bottom right
2473 cairo_move_to(cr, 0.1, 0.9);
2474 cairo_line_to(cr, 0.9, 0.9);
2475 cairo_line_to(cr, 0.9, 0.1);
2476 break;
2477 }
2478 cairo_stroke(cr);
2479
2480 FINISH
2481}
2482
2483void dtgtk_cairo_paint_text_label(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2484{
2485 PREAMBLE(1, 1, 0, 0)
2486
2487 // draw an A
2488 cairo_move_to(cr, 0.1, 1.);
2489 cairo_line_to(cr, 0.5, 0.);
2490 cairo_line_to(cr, 0.9, 1.);
2491
2492 cairo_move_to(cr, 0.25, 0.6);
2493 cairo_line_to(cr, 0.75, 0.6);
2494 cairo_stroke(cr);
2495
2496 FINISH
2497}
2498
2499void dtgtk_cairo_paint_or(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2500{
2501 PREAMBLE(1, 1, 0, 0)
2502
2503 cairo_move_to(cr, 0.1, 0.3);
2504 cairo_curve_to(cr, 0.1, 1.1, 0.9, 1.1, 0.9, 0.3);
2505 cairo_stroke(cr);
2506
2507 FINISH
2508}
2509
2510void dtgtk_cairo_paint_and(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2511{
2512 PREAMBLE(1, 1, 0, 0)
2513
2514 cairo_move_to(cr, 0.1, 0.9);
2515 cairo_curve_to(cr, 0.1, 0.1, 0.9, 0.1, 0.9, 0.9);
2516 cairo_stroke(cr);
2517
2518 FINISH
2519}
2520
2521void dtgtk_cairo_paint_andnot(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2522{
2523 PREAMBLE(1, 1, 0, 0)
2524
2525 cairo_move_to(cr, 0.1, 0.1);
2526 cairo_line_to(cr, 0.9, 0.9);
2527 cairo_stroke(cr);
2528
2529 FINISH
2530}
2531
2532void dtgtk_cairo_paint_dropdown(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2533{
2534 PREAMBLE(1, 1, 0, 0)
2535
2536 cairo_move_to(cr, 0.1, 0.3);
2537 cairo_line_to(cr, 0.5, 0.7);
2538 cairo_line_to(cr, 0.9, 0.3);
2539 cairo_stroke(cr);
2540
2541 FINISH
2542}
2543
2544void dtgtk_cairo_paint_bracket(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2545{
2546 PREAMBLE(1, 1, 0, 0)
2547
2548 cairo_rectangle(cr, 0.05, 0.05, 0.45, 0.45);
2549 cairo_stroke(cr);
2550 cairo_set_line_width(cr, 0.025);
2551 cairo_rectangle(cr, 0.55, 0.05, 0.45, 0.45);
2552 cairo_stroke(cr);
2553 cairo_set_line_width(cr, 0.05);
2554 cairo_rectangle(cr, 0.05, 0.55, 0.45, 0.45);
2555 cairo_stroke(cr);
2556 cairo_set_line_width(cr, 0.1);
2557 cairo_rectangle(cr, 0.55, 0.55, 0.45, 0.45);
2558 cairo_stroke(cr);
2559
2560 FINISH
2561}
2562
2563void dtgtk_cairo_paint_lock(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2564{
2565 PREAMBLE(1, 1, 0, 0)
2566
2567 // Adding the lock body
2568 cairo_rectangle(cr, 0.25, 0.5, .5, .45);
2569 cairo_fill(cr);
2570
2571 // Adding the lock shank
2572 cairo_translate(cr, .5, .5);
2573 cairo_scale(cr, .2, .4);
2574 cairo_arc(cr, 0, 0, 1, M_PI, 0);
2575 cairo_stroke(cr);
2576
2577 FINISH
2578}
2579
2580void dtgtk_cairo_paint_check_mark(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2581{
2582 PREAMBLE(1, 1, 0, 0)
2583
2584 cairo_move_to(cr, 0.20, 0.45);
2585 cairo_line_to(cr, 0.45, 0.90);
2586 cairo_line_to(cr, 0.90, 0.20);
2587 cairo_stroke(cr);
2588
2589 FINISH
2590}
2591
2592void dtgtk_cairo_paint_overexposed(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2593{
2594 PREAMBLE(1, 1, 0, 0)
2595
2596 /* the triangle */
2597 cairo_move_to(cr, 1.0, 0);
2598 cairo_line_to(cr, 0, 1.0);
2599 cairo_line_to(cr, 1.0, 1.0);
2600 cairo_fill(cr);
2601
2602 /* outer rect */
2604 cairo_stroke(cr);
2605
2606 FINISH
2607}
2608
2609void dtgtk_cairo_paint_bulb(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2610{
2611 PREAMBLE(1, 1, 0, 0)
2612
2613 const float icon_scale = 1.0 / 1.16;
2614 const float line_width = 0.1 * icon_scale;
2615 const float glass_radius = 0.4 * icon_scale;
2616 const float glass_y = glass_radius;
2617 const float screw_y = glass_y + 0.46 * icon_scale;
2618 const float nib_radius = 2.0 * line_width;
2619 const float nib_y = 1.0 - nib_radius;
2620
2621 // glass
2622 cairo_arc_negative(cr, 0.5, glass_y, glass_radius, 1., M_PI - 1.);
2623 cairo_close_path(cr);
2624
2625 if(flags & CPF_ACTIVE)
2626 {
2628 cairo_fill(cr);
2629 }
2630 else
2631 {
2632 cairo_stroke(cr);
2633 cairo_arc(cr, 0.5, glass_y, 0.5 * glass_radius, -M_PI / 3., -M_PI / 6.);
2634 cairo_stroke(cr);
2635 }
2636
2637 // screw
2638 cairo_move_to(cr, 0.5 - 1.7 * line_width, screw_y);
2639 cairo_line_to(cr, 0.5 + 1.7 * line_width, screw_y);
2640 cairo_stroke(cr);
2641
2642 // nib
2643 cairo_arc(cr, 0.5, nib_y, nib_radius, 0, M_PI);
2644 cairo_fill(cr);
2645
2646 FINISH
2647}
2648
2649void dtgtk_cairo_paint_rawoverexposed(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2650{
2651 PREAMBLE(1, 1, 0, 0)
2652
2653 cairo_save(cr);
2654
2655 const float alpha = (flags & CPF_ACTIVE ? 1.0 : 0.4);
2656
2657 // draw 4 CFA-like colored squares
2658 cairo_set_source_rgba(cr, 0.3, 0.3, 0.3, alpha); // red
2659 cairo_rectangle(cr, 0, 0, 0.5, 0.5);
2660 cairo_fill(cr);
2661
2662 cairo_set_source_rgba(cr, 0.6, 0.6, 0.6, alpha); // green
2663 cairo_rectangle(cr, 0.5, 0, 0.5, 0.5);
2664 cairo_fill(cr);
2665
2666 cairo_set_source_rgba(cr, 0.6, 0.6, 0.6, alpha); // green
2667 cairo_rectangle(cr, 0, 0.5, 0.5, 0.5);
2668 cairo_fill(cr);
2669
2670 cairo_set_source_rgba(cr, 0.1, 0.1, 0.1, alpha); // blue
2671 cairo_rectangle(cr, 0.5, 0.5, 0.5, 0.5);
2672 cairo_fill(cr);
2673
2674 cairo_restore(cr);
2675
2676 /* outer rect */
2678 cairo_stroke(cr);
2679
2680 FINISH
2681}
2682
2683void dtgtk_cairo_paint_gamut_check(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2684{
2685 PREAMBLE(1.15, 1, 0, -0.05)
2686
2687 // the triangle
2688 cairo_move_to(cr, 0.0, 1 - 0.067);
2689 cairo_line_to(cr, 0.5, 1 - 0.933);
2690 cairo_line_to(cr, 1.0, 1 - 0.067);
2691 cairo_close_path(cr);
2692
2693 // exclamation mark
2694 // the dot
2696 cairo_move_to(cr, 0.42, 1 - 0.11);
2697 cairo_line_to(cr, 0.42, 1 - 0.25);
2698 cairo_line_to(cr, 0.58, 1 - 0.25);
2699 cairo_line_to(cr, 0.58, 1 - 0.11);
2700 cairo_close_path(cr);
2701
2702 // the line
2704 cairo_move_to(cr, 0.447, 1 - 0.29);
2705 cairo_line_to(cr, 0.415, 1 - 0.552);
2706 cairo_line_to(cr, 0.415, 1 - 0.683);
2707 cairo_line_to(cr, 0.585, 1 - 0.683);
2708 cairo_line_to(cr, 0.585, 1 - 0.552);
2709 cairo_line_to(cr, 0.552, 1 - 0.29);
2710 cairo_close_path(cr);
2711
2713 cairo_fill(cr);
2714
2715 FINISH
2716}
2717
2718void dtgtk_cairo_paint_softproof(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2719{
2720 PREAMBLE(1, 1, 0, 0)
2721
2722 // Keep proportions and center it horizontally while fitting that extent in 0..1.
2723 const float icon_scale = 1.0 / 1.08;
2724 cairo_translate(cr, 0.5 - 0.5 * icon_scale, 0.08 * icon_scale);
2726
2727 // the horse shoe
2728 cairo_move_to(cr, 0.30, 1 - 0.0);
2729 cairo_curve_to(cr, 0.14, 1 - 0.09, 0.03, 1 - 0.88, 0.18, 1 - 1);
2730 cairo_curve_to(cr, 0.32, 1 - 1.08, 0.69, 1 - 0.63, 0.97, 1 - 0.32);
2731 cairo_close_path(cr);
2732
2733 // triangle
2735 cairo_move_to(cr, 0.28, 1 - 0.07);
2736 cairo_line_to(cr, 0.37, 1 - 0.75);
2737 cairo_line_to(cr, 0.82, 1 - 0.42);
2738 cairo_close_path(cr);
2739
2741 cairo_fill(cr);
2742
2743 FINISH
2744}
2745
2746void dtgtk_cairo_paint_display(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2747{
2748 PREAMBLE(1, 1, 0, 0)
2749
2750 const double inset = 0.5 * cairo_get_line_width(cr);
2751 const double icon_min = inset;
2752 const double icon_max = 1.0 - inset;
2753 const double icon_size = icon_max - icon_min;
2754 const double screen_bottom = icon_min + 0.75 * icon_size;
2755
2756 cairo_rectangle(cr, icon_min, icon_min, icon_size, 0.75 * icon_size);
2757 cairo_move_to(cr, 0.5, screen_bottom);
2758 cairo_line_to(cr, 0.5, icon_max);
2759 cairo_move_to(cr, icon_min + 0.3 * icon_size, icon_max);
2760 cairo_line_to(cr, icon_min + 0.7 * icon_size, icon_max);
2761 cairo_stroke(cr);
2762
2763 FINISH
2764}
2765
2766void dtgtk_cairo_paint_rect_landscape(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2767{
2768 PREAMBLE(1, 1, 0, 0)
2769
2770 cairo_move_to(cr, 0.0, 0.3);
2771 cairo_line_to(cr, 1.0, 0.3);
2772 cairo_line_to(cr, 1.0, 0.7);
2773 cairo_line_to(cr, 0.0, 0.7);
2774 cairo_line_to(cr, 0.0, 0.3);
2775 cairo_stroke(cr);
2776
2777 FINISH
2778}
2779
2780void dtgtk_cairo_paint_rect_portrait(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2781{
2782 PREAMBLE(1, 1, 0, 0)
2783
2784 cairo_move_to(cr, 0.3, 0.0);
2785 cairo_line_to(cr, 0.7, 0.0);
2786 cairo_line_to(cr, 0.7, 1.0);
2787 cairo_line_to(cr, 0.3, 1.0);
2788 cairo_line_to(cr, 0.3, 0.0);
2789 cairo_stroke(cr);
2790
2791 FINISH
2792}
2793
2794void dtgtk_cairo_paint_polygon(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2795{
2796 PREAMBLE(1, 1, 0, 0)
2797
2798 cairo_move_to(cr, 0.0, 0.3);
2799 cairo_line_to(cr, 0.7, 0.0);
2800 cairo_line_to(cr, 0.5, 0.5);
2801 cairo_line_to(cr, 1.0, 0.6);
2802 cairo_line_to(cr, 0.6, 1.0);
2803 cairo_line_to(cr, 0.3, 0.8);
2804 cairo_line_to(cr, 0.0, 0.3);
2805 cairo_stroke(cr);
2806
2807 FINISH
2808}
2809
2810void dtgtk_cairo_paint_zoom(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2811{
2812 PREAMBLE(1, 1, 0, 0)
2813
2814 /* draw magnifying glass */
2815
2816 // handle
2817 cairo_move_to(cr, 0.9, 1.0 - 0.1);
2818 cairo_line_to(cr, 0.65, 1.0 - 0.35);
2819 cairo_stroke(cr);
2820
2821 // lens
2822 cairo_arc(cr, 0.35, 1.0 - 0.65, 0.3, -M_PI, M_PI);
2823 cairo_stroke(cr);
2824
2825 FINISH
2826}
2827
2828void dtgtk_cairo_paint_multiinstance(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2829{
2830 PREAMBLE(1, 1, 0, 0)
2831
2832 cairo_rectangle(cr, 0.35, 0.35, 0.6, 0.6);
2833 cairo_stroke(cr);
2834 cairo_rectangle(cr, 0.05, 0.05, 0.9, 0.9);
2835 cairo_rectangle(cr, 0.85, 0.25, -0.65, 0.65);
2836 cairo_clip(cr);
2837 cairo_rectangle(cr, 0.05, 0.05, 0.6, 0.6);
2839 cairo_fill(cr);
2840
2841 FINISH
2842}
2843
2844void dtgtk_cairo_paint_modulegroup_active(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2845{
2846 PREAMBLE(1.1, 1, 0, 0)
2847
2848 cairo_arc(cr, 0.5, 0.5, 0.40, (-50 * 3.145 / 180), (230 * 3.145 / 180));
2849 cairo_move_to(cr, 0.5, 0.05);
2850 cairo_line_to(cr, 0.5, 0.40);
2851 cairo_stroke(cr);
2852
2853 FINISH
2854}
2855
2856void dtgtk_cairo_paint_modulegroup_favorites(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2857{
2858 PREAMBLE(1.2, 1, 0, 0)
2859
2860 const float r1 = 0.2;
2861 const float r2 = 0.4;
2862 const float d = 2.0 * M_PI * 0.1f;
2863 const float dx[10] = { sinf(0.0), sinf(d), sinf(2 * d), sinf(3 * d), sinf(4 * d),
2864 sinf(5 * d), sinf(6 * d), sinf(7 * d), sinf(8 * d), sinf(9 * d) };
2865 const float dy[10] = { cosf(0.0), cosf(d), cosf(2 * d), cosf(3 * d), cosf(4 * d),
2866 cosf(5 * d), cosf(6 * d), cosf(7 * d), cosf(8 * d), cosf(9 * d) };
2867 cairo_move_to(cr, 0.5 + r1 * dx[0], 0.5 - r1 * dy[0]);
2868 for(int k = 1; k < 10; k++)
2869 if(k & 1)
2870 cairo_line_to(cr, 0.5 + r2 * dx[k], 0.5 - r2 * dy[k]);
2871 else
2872 cairo_line_to(cr, 0.5 + r1 * dx[k], 0.5 - r1 * dy[k]);
2873 cairo_close_path(cr);
2874 cairo_stroke(cr);
2875
2876 FINISH
2877}
2878
2879void dtgtk_cairo_paint_modulegroup_basics(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2880{
2881 PREAMBLE(1.1, 1, 0, 0)
2882
2883 // the colors
2884 double r, g, b, a;
2885 cairo_pattern_get_rgba(cairo_get_source(cr), &r, &g, &b, &a);
2886 double na = a * 0.7;
2887 // the stroke width
2888 double sw = cairo_get_line_width(cr);
2889
2890 // background sliders
2891 cairo_set_source_rgba(cr, r, g, b, na);
2892 cairo_set_line_width(cr, sw * 1.2);
2893 cairo_move_to(cr, 0.1, 0.2);
2894 cairo_line_to(cr, 0.9, 0.2);
2895 cairo_stroke(cr);
2896 cairo_move_to(cr, 0.1, 0.55);
2897 cairo_line_to(cr, 0.9, 0.55);
2898 cairo_stroke(cr);
2899 cairo_move_to(cr, 0.1, 0.9);
2900 cairo_line_to(cr, 0.9, 0.9);
2901 cairo_stroke(cr);
2902
2903 // foreground sliders
2904 cairo_set_source_rgba(cr, r, g, b, a);
2906 cairo_move_to(cr, 0.1, 0.2);
2907 cairo_line_to(cr, 0.6, 0.2);
2908 cairo_stroke(cr);
2909 cairo_move_to(cr, 0.9, 0.55);
2910 cairo_line_to(cr, 0.3, 0.55);
2911 cairo_stroke(cr);
2912 cairo_move_to(cr, 0.1, 0.9);
2913 cairo_line_to(cr, 0.4, 0.9);
2914 cairo_stroke(cr);
2915
2916 // cursors
2917 cairo_move_to(cr, 0.70, 0.0);
2918 cairo_line_to(cr, 0.81, 0.30);
2919 cairo_line_to(cr, 0.59, 0.30);
2920 cairo_close_path(cr);
2921 cairo_fill(cr);
2922 cairo_move_to(cr, 0.2, 0.35);
2923 cairo_line_to(cr, 0.31, 0.65);
2924 cairo_line_to(cr, 0.09, 0.65);
2925 cairo_close_path(cr);
2926 cairo_fill(cr);
2927 cairo_move_to(cr, 0.55, 0.70);
2928 cairo_line_to(cr, 0.66, 1.0);
2929 cairo_line_to(cr, 0.44, 1.0);
2930 cairo_close_path(cr);
2931 cairo_fill(cr);
2932
2933 FINISH
2934}
2935
2936void dtgtk_cairo_paint_modulegroup_basic(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2937{
2938 PREAMBLE(1.1, 1, 0, 0)
2939
2940 /* draw circle */
2941 cairo_arc(cr, 0.5, 0.5, 0.40, -M_PI, M_PI);
2942 cairo_stroke(cr);
2943
2944 FINISH
2945}
2946
2947void dtgtk_cairo_paint_modulegroup_tone(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2948{
2949 PREAMBLE(1.1, 1, 0, 0)
2950
2951 /* draw circle */
2952 cairo_arc(cr, 0.5, 0.5, 0.40, -M_PI, M_PI);
2953 cairo_stroke(cr);
2954
2955 /* fill circle */
2957 pat = cairo_pattern_create_linear(0, 0, 1, 0);
2958 cairo_pattern_add_color_stop_rgba(pat, 0, 1, 1, 1, 1);
2959 cairo_pattern_add_color_stop_rgba(pat, 1, 1, 1, 1, 0);
2960 cairo_set_source(cr, pat);
2961 cairo_arc(cr, 0.5, 0.5, 0.40, -M_PI, M_PI);
2962 cairo_fill(cr);
2964
2965 FINISH
2966}
2967
2968void dtgtk_cairo_paint_modulegroup_color(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2969{
2970 PREAMBLE(1.1, 1, 0, 0)
2971
2972 /* draw circle */
2973 cairo_arc(cr, 0.5, 0.5, 0.40, -M_PI, M_PI);
2974 cairo_stroke(cr);
2975
2976 /* fill circle */
2977 float a = 0.6;
2979 pat = cairo_pattern_create_linear(0, 0, 1, 0);
2980 cairo_pattern_add_color_stop_rgba(pat, 0.0, 1, 0, 0, a);
2981 cairo_pattern_add_color_stop_rgba(pat, 0.1, 1, 0, 0, a);
2982 cairo_pattern_add_color_stop_rgba(pat, 0.5, 0, 1, 0, a);
2983 cairo_pattern_add_color_stop_rgba(pat, 0.9, 0, 0, 1, a);
2984 cairo_pattern_add_color_stop_rgba(pat, 1.0, 0, 0, 1, a);
2985 cairo_set_source(cr, pat);
2986 cairo_arc(cr, 0.5, 0.5, 0.40, -M_PI, M_PI);
2987 cairo_fill(cr);
2989
2990 FINISH
2991}
2992
2993void dtgtk_cairo_paint_modulegroup_correct(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
2994{
2995 PREAMBLE(1.1, 1, 0, 0)
2996
2997 /* draw circle */
2998 cairo_arc(cr, 0.42, 0.5, 0.40, 0, M_PI);
2999 cairo_stroke(cr);
3000 cairo_arc(cr, 0.58, 0.5, 0.40, M_PI, 0);
3001 cairo_stroke(cr);
3002
3003 FINISH
3004}
3005
3006void dtgtk_cairo_paint_modulegroup_effect(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3007{
3008 PREAMBLE(1.1, 1, 0, 0)
3009
3010 /* draw circle */
3011 cairo_arc(cr, 0.5, 0.5, 0.40, -M_PI, M_PI);
3012 cairo_stroke(cr);
3013
3014 /* sparkles */
3015
3016 cairo_move_to(cr, 0.378, 0.502);
3017 cairo_line_to(cr, 0.522, 0.549);
3018 cairo_line_to(cr, 0.564, 0.693);
3019 cairo_line_to(cr, 0.653, 0.569);
3020 cairo_line_to(cr, 0.802, 0.573);
3021 cairo_line_to(cr, 0.712, 0.449);
3022 cairo_line_to(cr, 0.762, 0.308);
3023 cairo_line_to(cr, 0.618, 0.356);
3024 cairo_line_to(cr, 0.500, 0.264);
3025 cairo_line_to(cr, 0.500, 0.417);
3026 cairo_close_path(cr);
3027
3028 cairo_move_to(cr, 0.269, 0.717);
3029 cairo_line_to(cr, 0.322, 0.735);
3030 cairo_line_to(cr, 0.337, 0.787);
3031 cairo_line_to(cr, 0.370, 0.742);
3032 cairo_line_to(cr, 0.424, 0.743);
3033 cairo_line_to(cr, 0.391, 0.698);
3034 cairo_line_to(cr, 0.409, 0.646);
3035 cairo_line_to(cr, 0.357, 0.664);
3036 cairo_line_to(cr, 0.314, 0.630);
3037 cairo_line_to(cr, 0.314, 0.686);
3038
3039 cairo_move_to(cr, 0.217, 0.366);
3040 cairo_line_to(cr, 0.271, 0.384);
3041 cairo_line_to(cr, 0.286, 0.437);
3042 cairo_line_to(cr, 0.319, 0.391);
3043 cairo_line_to(cr, 0.374, 0.393);
3044 cairo_line_to(cr, 0.341, 0.347);
3045 cairo_line_to(cr, 0.360, 0.295);
3046 cairo_line_to(cr, 0.306, 0.312);
3047 cairo_line_to(cr, 0.263, 0.279);
3048 cairo_line_to(cr, 0.263, 0.335);
3049
3050 cairo_close_path(cr);
3051
3052 cairo_stroke(cr);
3053
3054 FINISH
3055}
3056
3057void dtgtk_cairo_paint_modulegroup_grading(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3058{
3059 PREAMBLE(1.2, 1, 0, 0)
3060
3061 /* draw circle */
3062 cairo_arc(cr, 0.5, 0.5, 0.40, -M_PI, M_PI);
3064 cairo_clip(cr);
3065
3066 /* fill circle */
3067 float a = 0.6;
3069 pat = cairo_pattern_create_linear(0, 0, 1, 0);
3070 cairo_pattern_add_color_stop_rgba(pat, 0.00, 1, 0, 0, a);
3071 cairo_pattern_add_color_stop_rgba(pat, 0.10, 1, 0, 0, a);
3072 cairo_pattern_add_color_stop_rgba(pat, 0.40, 1, 1, 0, a);
3073 cairo_pattern_add_color_stop_rgba(pat, 0.50, 0, 1, 0, a);
3074 cairo_pattern_add_color_stop_rgba(pat, 0.60, 0, 1, 1, a);
3075 cairo_pattern_add_color_stop_rgba(pat, 0.90, 0, 0, 1, a);
3076 cairo_pattern_add_color_stop_rgba(pat, 1.00, 0, 0, 1, a);
3077 cairo_set_source(cr, pat);
3078 cairo_arc(cr, 0.5, 0.5, 0.40, -M_PI, M_PI);
3079 cairo_fill(cr);
3081
3082 pat = cairo_pattern_create_linear(0, 0, 0, 1);
3083 cairo_pattern_add_color_stop_rgba(pat, 0.0, 1, 1, 1, a);
3084 cairo_pattern_add_color_stop_rgba(pat, 0.5, 0.5, 0.5, 0.5, a);
3085 cairo_pattern_add_color_stop_rgba(pat, 1.0, 0, 0, 0, a);
3086 cairo_set_source(cr, pat);
3087 cairo_arc(cr, 0.5, 0.5, 0.40, -M_PI, M_PI);
3088
3092 cairo_fill(cr);
3093
3095
3096 FINISH
3097}
3098
3099void dtgtk_cairo_paint_modulegroup_technical(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3100{
3101 PREAMBLE(1.2, 1, 0, 0)
3102
3103 /* draw circle */
3104 cairo_arc(cr, 0.5, 0.5, 0.4, -M_PI, M_PI);
3105 cairo_stroke(cr);
3106
3107 /* draw thin lens */
3108 cairo_arc(cr, 0.05, 0.5, 0.55, -0.6107259643892086, 0.6107259643892086);
3109 cairo_arc(cr, 0.95, 0.5, 0.55, 2.5308666892005847, 3.7523186179790016);
3110 cairo_fill(cr);
3111
3112 /* draw the rays */
3113 cairo_move_to(cr, 0.3, 0.3);
3114 cairo_line_to(cr, 0.5, 0.3);
3115 cairo_line_to(cr, 0.8, 0.5);
3116 cairo_stroke(cr);
3117
3118 cairo_move_to(cr, 0.25, 0.5);
3119 cairo_line_to(cr, 0.80, 0.5);
3120 cairo_stroke(cr);
3121
3122 cairo_move_to(cr, 0.3, 0.7);
3123 cairo_line_to(cr, 0.5, 0.7);
3124 cairo_line_to(cr, 0.80, 0.5);
3125 cairo_stroke(cr);
3126
3127 FINISH
3128}
3129
3130void dtgtk_cairo_paint_map_pin(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3131{
3132 PREAMBLE(1, 1, 0, 0)
3133
3134 cairo_move_to(cr, 0.2, 0.0);
3135 cairo_line_to(cr, 0.0, 1.0);
3136 cairo_line_to(cr, 0.7, 0.0);
3137 cairo_close_path(cr);
3138 cairo_fill(cr);
3139
3140 FINISH
3141}
3142
3143void dtgtk_cairo_paint_tool_clone(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3144{
3145 PREAMBLE(1, 1, 0, 0)
3146
3147 cairo_arc(cr, 0.65, 0.35, 0.35, 0, 2 * M_PI);
3148 cairo_stroke(cr);
3149
3150 cairo_arc(cr, 0.35, 0.65, 0.35, 0, 2 * M_PI);
3151 cairo_stroke(cr);
3152
3153 FINISH
3154}
3155
3156void dtgtk_cairo_paint_tool_heal(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3157{
3158 PREAMBLE(1, 1, 0, 0)
3159
3160 cairo_set_line_width(cr, 0.01);
3161 cairo_move_to(cr, 0.35, 0.1);
3162 cairo_rel_line_to(cr, 0.3, 0.0);
3163 cairo_rel_line_to(cr, 0.0, 0.25);
3164 cairo_rel_line_to(cr, 0.25, 0.0);
3165 cairo_rel_line_to(cr, 0.0, 0.3);
3166 cairo_rel_line_to(cr, -0.25, 0.0);
3167 cairo_rel_line_to(cr, 0.0, 0.25);
3168 cairo_rel_line_to(cr, -0.3, 0.0);
3169 cairo_rel_line_to(cr, 0.0, -0.25);
3170 cairo_rel_line_to(cr, -0.25, 0.0);
3171 cairo_rel_line_to(cr, 0.0, -0.3);
3172 cairo_rel_line_to(cr, 0.25, 0.0);
3173 cairo_close_path(cr);
3174
3175 cairo_rectangle(cr, 0., 0., 1., 1.);
3176
3178 cairo_fill(cr);
3179 cairo_stroke(cr);
3180
3181 FINISH
3182}
3183
3184void dtgtk_cairo_paint_tool_fill(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3185{
3186 PREAMBLE(1.08, 1, 0, 0)
3187
3188 cairo_move_to(cr, 0.1, 0.1);
3189 cairo_line_to(cr, 0.2, 0.1);
3190 cairo_line_to(cr, 0.2, 0.9);
3191 cairo_line_to(cr, 0.8, 0.9);
3192 cairo_line_to(cr, 0.8, 0.1);
3193 cairo_line_to(cr, 0.9, 0.1);
3194 cairo_stroke(cr);
3195 cairo_rectangle(cr, 0.2, 0.4, .6, .5);
3196 cairo_fill(cr);
3197 cairo_stroke(cr);
3198
3199 FINISH
3200}
3201
3202void dtgtk_cairo_paint_tool_blur(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3203{
3204 PREAMBLE(1.1, 1, 0, 0)
3205
3206 cairo_move_to(cr, 0.5, 0.1);
3207 cairo_arc(cr, 0.5, 0.65, 0.28, -0.2 * M_PI, 1.2 * M_PI);
3208 cairo_close_path(cr);
3209 cairo_stroke(cr);
3210 cairo_set_line_width(cr, 0.1);
3211 cairo_arc(cr, 0.5, 0.65, 0.13, 0.65 * M_PI, 1.2 * M_PI);
3212 cairo_stroke(cr);
3213
3214 FINISH
3215}
3216
3217void dtgtk_cairo_paint_paste_forms(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3218{
3219 PREAMBLE(1, 1, 0, 0)
3220
3221 cairo_move_to(cr, 0.1, 0.6);
3222 cairo_line_to(cr, 0.9, 0.6);
3223 cairo_line_to(cr, 0.5, 1.0);
3224 cairo_close_path(cr);
3225 cairo_fill(cr);
3226 cairo_stroke(cr);
3227
3228 cairo_move_to(cr, 0.4, 0.0);
3229 cairo_line_to(cr, 0.6, 0.0);
3230 cairo_line_to(cr, 0.6, 0.6);
3231 cairo_line_to(cr, 0.4, 0.6);
3232 cairo_fill(cr);
3233 cairo_stroke(cr);
3234
3235 FINISH
3236}
3237
3238void dtgtk_cairo_paint_cut_forms(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3239{
3240 PREAMBLE(1, 1, 0, -0.07)
3241
3242 cairo_set_line_width(cr, 0.1);
3243 if(flags & CPF_ACTIVE)
3244 {
3245 cairo_move_to(cr, 0.11, 0.25);
3246 cairo_line_to(cr, 0.89, 0.75);
3247 cairo_move_to(cr, 0.25, 0.11);
3248 cairo_line_to(cr, 0.75, 0.89);
3249 cairo_stroke(cr);
3250
3251 cairo_arc(cr, 0.89, 0.53, 0.17, 0, 2 * M_PI);
3252 cairo_stroke(cr);
3253
3254 cairo_arc(cr, 0.53, 0.89, 0.17, 0, 2 * M_PI);
3255 cairo_stroke(cr);
3256 }
3257 else
3258 {
3259 cairo_move_to(cr, 0.01, 0.35);
3260 cairo_line_to(cr, 0.99, 0.65);
3261 cairo_move_to(cr, 0.35, 0.01);
3262 cairo_line_to(cr, 0.65, 0.99);
3263 cairo_stroke(cr);
3264
3265 cairo_arc(cr, 0.89, 0.53, 0.17, 0, 2 * M_PI);
3266 cairo_stroke(cr);
3267
3268 cairo_arc(cr, 0.53, 0.89, 0.17, 0, 2 * M_PI);
3269 cairo_stroke(cr);
3270 }
3271
3272 FINISH
3273}
3274
3275void dtgtk_cairo_paint_display_wavelet_scale(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3276{
3277 PREAMBLE(0.93, 1, 0, 0)
3278
3279 if(flags & CPF_ACTIVE)
3280 {
3281 float x1 = 0.2f;
3282 float y1 = 1.f;
3283
3284 cairo_move_to(cr, x1, y1);
3285
3286 const int steps = 4;
3287 const float delta = 1. / (float)steps;
3288 for(int i = 0; i < steps; i++)
3289 {
3290 y1 -= delta;
3291 cairo_line_to(cr, x1, y1);
3292 x1 += delta;
3293 if(x1 > .9) x1 = .9;
3294 cairo_line_to(cr, x1, y1);
3295 }
3296 cairo_stroke(cr);
3297
3298 cairo_set_line_width(cr, 0.1);
3299 cairo_rectangle(cr, 0., 0., 1., 1.);
3300 cairo_stroke(cr);
3301 }
3302 else
3303 {
3304 cairo_move_to(cr, 0.08, 1.);
3305 cairo_curve_to(cr, 0.4, 0.05, 0.6, 0.05, 1., 1.);
3306 cairo_line_to(cr, 0.08, 1.);
3307 cairo_fill(cr);
3308
3309 cairo_set_line_width(cr, 0.1);
3310 cairo_rectangle(cr, 0., 0., 1., 1.);
3311 cairo_stroke(cr);
3312 }
3313
3314 FINISH
3315}
3316
3317void dtgtk_cairo_paint_auto_levels(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3318{
3319 PREAMBLE(1, 1, 0, 0)
3320
3321 cairo_move_to(cr, .1, 0.3);
3322 cairo_line_to(cr, .1, 1.);
3323 cairo_stroke(cr);
3324
3325 cairo_move_to(cr, .5, 0.1);
3326 cairo_line_to(cr, .5, 1.);
3327 cairo_stroke(cr);
3328
3329 cairo_move_to(cr, .9, 0.3);
3330 cairo_line_to(cr, .9, 1.);
3331 cairo_stroke(cr);
3332
3333 cairo_move_to(cr, 0., 1.0);
3334 cairo_line_to(cr, 1.0, 1.0);
3335 cairo_stroke(cr);
3336
3337 FINISH
3338}
3339
3340void _compass_star(cairo_t *cr, double cx, double cy, double size)
3341{
3342 const double a = size / 2.0;
3343 const double b = size / 10.0;
3344
3345 cairo_move_to(cr, cx, cy - a);
3346 cairo_line_to(cr, cx + b, cy - b);
3347 cairo_line_to(cr, cx + a, cy);
3348 cairo_line_to(cr, cx + b, cy + b);
3349 cairo_line_to(cr, cx, cy + a);
3350 cairo_line_to(cr, cx - b, cy + b);
3351 cairo_line_to(cr, cx - a, cy);
3352 cairo_line_to(cr, cx - b, cy - b);
3353 cairo_close_path(cr);
3354 cairo_fill(cr);
3355}
3356
3357void dtgtk_cairo_paint_compass_star(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3358{
3359 PREAMBLE(1, 1, 0 , 0)
3360
3361 _compass_star(cr, .5, .5, 1.);
3362
3363 FINISH
3364}
3365
3366void dtgtk_cairo_paint_wand(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3367{
3368 PREAMBLE(1, 1, 0, 0)
3369
3370 // the wand
3371 cairo_move_to(cr, 1., .85);
3372 cairo_line_to(cr, .85, 1.);
3373 cairo_line_to(cr, .2, .35);
3374 cairo_line_to(cr, .35, .2);
3375 cairo_close_path(cr);
3376 //cairo_stroke_preserve(cr);
3378 cairo_line_to(cr, .15, 0);
3379 cairo_line_to(cr, 0, .15);
3380 cairo_line_to(cr, .2, .35);
3381 cairo_stroke(cr);
3382
3383 // the magic
3384 _compass_star(cr, .5, .1, .25);
3385 _compass_star(cr, .2, .65, .4);
3386 _compass_star(cr, .75, .25, .5);
3387
3388 FINISH
3389}
3390
3391void dtgtk_cairo_paint_lt_mode_grid(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3392{
3393 PREAMBLE(1.4, 1, 0, 0)
3394
3395 cairo_rectangle(cr, 0.05, 0.2, 0.9, 0.6);
3396 cairo_move_to(cr, 0.06, 0.5);
3397 cairo_line_to(cr, 0.94, 0.5);
3398 cairo_move_to(cr, 0.35, 0.21);
3399 cairo_line_to(cr, 0.35, 0.79);
3400 cairo_move_to(cr, 0.65, 0.21);
3401 cairo_line_to(cr, 0.65, 0.79);
3402 cairo_stroke(cr);
3403
3404 cairo_set_line_width(cr, 0.08);
3405 cairo_rectangle(cr, 0.35, 0.5, 0.3, 0.3);
3406 cairo_stroke(cr);
3407
3408 FINISH
3409}
3410
3411void dtgtk_cairo_paint_lt_mode_zoom(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3412{
3413 PREAMBLE(1.4, 1, 0, 0)
3414
3415 cairo_rectangle(cr, 0.3, 0.2, 0.5, 0.34);
3416
3417 cairo_move_to(cr, 0, 0.2);
3418 cairo_line_to(cr, 0.2, 0.2);
3419 cairo_line_to(cr, 0.2, 0.54);
3420 cairo_line_to(cr, 0, 0.54);
3421
3422 cairo_move_to(cr, 1, 0.2);
3423 cairo_line_to(cr, 0.9, 0.2);
3424 cairo_line_to(cr, 0.9, 0.54);
3425 cairo_line_to(cr, 1, 0.54);
3426
3427 cairo_move_to(cr, 0, 0.65);
3428 cairo_line_to(cr, 0.2, 0.65);
3429 cairo_line_to(cr, 0.2, 0.8);
3430
3431 cairo_move_to(cr, 0.3, 0.8);
3432 cairo_line_to(cr, 0.3, 0.65);
3433 cairo_line_to(cr, 0.8, 0.65);
3434 cairo_line_to(cr, 0.8, 0.8);
3435
3436 cairo_stroke(cr);
3437
3438 FINISH
3439}
3440
3441void dtgtk_cairo_paint_lt_mode_culling_fixed(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3442{
3443 PREAMBLE(1.4, 1, 0, 0)
3444
3445 cairo_rectangle(cr, 0.16, 0.22, 0.31, 0.56);
3446 cairo_rectangle(cr, 0.53, 0.22, 0.31, 0.56);
3447 cairo_stroke(cr);
3448
3449 cairo_move_to(cr, 0.11, 0.4);
3450 cairo_line_to(cr, 0, 0.5);
3451 cairo_line_to(cr, 0.11, 0.6);
3452 cairo_fill(cr);
3453
3454 cairo_move_to(cr, 0.89, 0.4);
3455 cairo_line_to(cr, 1, 0.5);
3456 cairo_line_to(cr, 0.89, 0.6);
3457 cairo_fill(cr);
3458
3459// draw X
3460 cairo_move_to(cr, 0.22, 0.36);
3461 cairo_line_to(cr, 0.40, 0.64);
3462 cairo_move_to(cr, 0.22, 0.64);
3463 cairo_line_to(cr, 0.40, 0.36);
3464
3465// draw Y
3466 cairo_move_to(cr, 0.59, 0.36);
3467 cairo_line_to(cr, 0.68, 0.5);
3468 cairo_line_to(cr, 0.77, 0.36);
3469 cairo_move_to(cr, 0.68, 0.5);
3470 cairo_line_to(cr, 0.68, 0.64);
3471
3472 cairo_stroke(cr);
3473
3474 FINISH
3475}
3476
3477void dtgtk_cairo_paint_lt_mode_culling_dynamic(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3478{
3479 PREAMBLE(1.4, 1, 0, 0)
3480
3481 cairo_rectangle(cr, 0.16, 0.22, 0.31, 0.56);
3482 cairo_rectangle(cr, 0.53, 0.22, 0.31, 0.56);
3483 cairo_stroke(cr);
3484
3485// draw X
3486 cairo_move_to(cr, 0.22, 0.36);
3487 cairo_line_to(cr, 0.40, 0.64);
3488 cairo_move_to(cr, 0.22, 0.64);
3489 cairo_line_to(cr, 0.40, 0.36);
3490
3491// draw Y
3492 cairo_move_to(cr, 0.59, 0.36);
3493 cairo_line_to(cr, 0.68, 0.5);
3494 cairo_line_to(cr, 0.77, 0.36);
3495 cairo_move_to(cr, 0.68, 0.5);
3496 cairo_line_to(cr, 0.68, 0.64);
3497
3498 cairo_stroke(cr);
3499
3500 FINISH
3501}
3502
3503void dtgtk_cairo_paint_lt_mode_fullpreview(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3504{
3505 PREAMBLE(1.4, 1, 0, 0)
3506
3507 cairo_rectangle(cr, 0.07, 0.22, 0.86, 0.56);
3508 cairo_stroke(cr);
3509
3510 cairo_move_to(cr, 0.19, 0.29);
3511 cairo_line_to(cr, 0.19, 0.43);
3512 cairo_line_to(cr, 0.33, 0.29);
3513 cairo_fill(cr);
3514
3515 cairo_move_to(cr, 0.19, 0.71);
3516 cairo_line_to(cr, 0.19, 0.57);
3517 cairo_line_to(cr, 0.33, 0.71);
3518 cairo_fill(cr);
3519
3520 cairo_move_to(cr, 0.81, 0.71);
3521 cairo_line_to(cr, 0.81, 0.57);
3522 cairo_line_to(cr, 0.67, 0.71);
3523 cairo_fill(cr);
3524
3525 cairo_move_to(cr, 0.81, 0.29);
3526 cairo_line_to(cr, 0.81, 0.43);
3527 cairo_line_to(cr, 0.67, 0.29);
3528 cairo_fill(cr);
3529
3530 cairo_move_to(cr, 0.27, 0.37);
3531 cairo_line_to(cr, 0.30, 0.40);
3532 cairo_move_to(cr, 0.27, 0.63);
3533 cairo_line_to(cr, 0.30, 0.60);
3534 cairo_move_to(cr, 0.73, 0.63);
3535 cairo_line_to(cr, 0.70, 0.60);
3536 cairo_move_to(cr, 0.73, 0.37);
3537 cairo_line_to(cr, 0.70, 0.40);
3538 cairo_stroke(cr);
3539
3540 FINISH
3541}
3542
3543void dtgtk_cairo_paint_link(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3544{
3545 PREAMBLE(1, 1, 0, 0)
3546
3547 cairo_set_line_width(cr, .1);
3548
3549 //arrow
3550 cairo_move_to(cr, .5, .5);
3551 cairo_line_to(cr, 1., 0.);
3552 cairo_stroke(cr);
3553 cairo_move_to(cr, .65, 0.);
3554 cairo_line_to(cr, 1., 0.);
3555 cairo_line_to(cr, 1., .35);
3556 cairo_stroke(cr);
3557
3558 //rounded rectangle
3559 cairo_move_to(cr, .8, .6);
3560 cairo_line_to(cr, .8, .85);
3561 cairo_arc (cr, .65, .85, .15, 0., .5 * M_PI);
3562 cairo_line_to(cr, .15, 1.);
3563 cairo_arc (cr, .15, .85, .15, .5 * M_PI, M_PI);
3564 cairo_line_to(cr, 0., .35);
3565 cairo_arc (cr, .15, .35, .15, M_PI, 1.5 * M_PI);
3566 cairo_line_to(cr, .4, .2);
3567 cairo_stroke(cr);
3568
3569 FINISH
3570}
3571
3572void dtgtk_cairo_paint_shortcut(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3573{
3574 PREAMBLE(1.15, 1, 0, 0)
3575
3576 //keyboard outline
3577 cairo_set_line_width(cr, .05);
3579
3580 cairo_move_to(cr, .9, .27);
3581 cairo_line_to(cr, .1, .27);
3582 cairo_line_to(cr, .1, .73);
3583 cairo_line_to(cr, .9, .73);
3584 cairo_line_to(cr, .9, .27);
3585
3586 cairo_stroke(cr);
3587
3588 //keyboard buttons
3589
3590 const double cr_linewidth=.04;
3591 const int toprow_keycount = 7;
3592
3596
3597 const double kheight = .73-.27;
3598 const double kwidth = .9 - .1;
3599 const double rspace = (kheight - cr_linewidth*3.)/4.;
3600 const double keylength = (kwidth-(cr_linewidth*2.0))/((double)toprow_keycount+((double)toprow_keycount/0.9));
3601 const double keyspace = keylength / 0.9;
3602 const double spacelength = kwidth / 2.0;
3603
3604 // top row
3606 double rowstartpos = .1 + (kwidth - keyrowwidth)/2;
3607 for(int i=0; i < 7; i++)
3608 {
3611 }
3612
3613 // middle row
3615 rowstartpos = .1 + (kwidth - keyrowwidth)/2;
3616 for(int i=0; i < 6; i++)
3617 {
3620 }
3621
3622 // 3rd (space) row
3624 rowstartpos = .1 + (kwidth - keyrowwidth)/2;
3627
3628 cairo_stroke(cr);
3629
3630 FINISH
3631}
3632
3633void dtgtk_cairo_paint_pin(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3634{
3635 PREAMBLE(1, 1, 0, 0)
3636
3637 // the needle
3638 cairo_move_to(cr, 0.5, 0.5);
3639 cairo_line_to(cr, 0, 1.0);
3640 cairo_stroke(cr);
3641
3642 // the main part
3643 cairo_move_to(cr, 0.13, 0.45);
3644 cairo_line_to(cr, 0.57, 0.88);
3645 cairo_line_to(cr, 0.67, 0.34);
3646 cairo_close_path(cr);
3647 cairo_fill(cr);
3648 cairo_move_to(cr, 0.61, 0);
3649 cairo_line_to(cr, 1.0, 0.4);
3650 cairo_line_to(cr, 0.34, 0.66);
3651 cairo_close_path(cr);
3652 cairo_fill(cr);
3653
3654 FINISH
3655}
3656
3657void dtgtk_cairo_paint_link_chain(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3658{
3659 PREAMBLE(1, 1, 0, 0)
3660
3661 const double radius = 0.20;
3662 const double offset = 0.24;
3663 const double height = (radius + offset) * 2.0;
3664 const double scale_y = 1 / height;
3665 const double angle = M_PI / 4.0;
3666
3667 cairo_translate(cr, 0.5, 0.5);
3668 cairo_rotate(cr, angle);
3669 cairo_scale(cr, 1, scale_y);
3670
3672 cairo_arc(cr, 0.0, -offset + 0.08, radius, 0, 1 * M_PI);
3673 cairo_arc(cr, 0.0, -offset - 0.08, radius, 1 * M_PI, 2 * M_PI);
3674 cairo_close_path(cr);
3675
3677 cairo_arc(cr, 0.0, offset + 0.08, radius, 0, 1 * M_PI);
3678 cairo_arc(cr, 0.0, offset - 0.08, radius, 1 * M_PI, 2 * M_PI);
3679 cairo_close_path(cr);
3680
3681 cairo_stroke(cr);
3682
3683 FINISH
3684}
3685
3693void dtgtk_cairo_paint_flowchart(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
3694{
3695 PREAMBLE(1, 1, 0, 0)
3696
3697 // Draw in a SOURCE group so overlapping strokes don't accumulate alpha.
3699 cairo_push_group(cr);
3701
3703
3704 const double width = 0.25;
3705 const double height = 0.25;
3706 const double margin = 0.05;
3707
3708 // Rectangle positions and dimensions
3709 const double left = margin;
3710 const double top = margin;
3711 const double right = 1.0 - margin - width;
3712 const double bottom = 1.0 - margin - height;
3713 const double center_x = margin + width * 0.5;
3714 const double half_width = width * 0.5;
3715
3716 // Draw rectangles forming flowchart boxes
3717 cairo_rectangle(cr, left, top, width, height);
3718 cairo_rectangle(cr, right, top, width, height);
3719 cairo_rectangle(cr, left, bottom, width, height);
3720
3721 // Draw vertical connector line
3722 cairo_move_to(cr, center_x, bottom);
3723 cairo_line_to(cr, center_x, top + height);
3724
3725 // Draw curved connector to right box
3726 cairo_move_to(cr, center_x, 0.5);
3727 cairo_curve_to(cr, right + half_width, 0.5, right + half_width, 0.5, right + half_width, margin + height);
3728
3729 cairo_stroke(cr);
3730
3733 cairo_paint(cr);
3734
3735 FINISH
3736}
3737
3738void dtgtk_liquify_cairo_paint_node_tool(cairo_t *cr, const gint x, const gint y, const gint w, const gint h,
3739 const gint flags, void *data)
3740{
3741 PREAMBLE(1, 1, 0, 0);
3742 cairo_arc(cr, 0.5, 0.5, 0.2, 0, 2 * M_PI);
3743 cairo_stroke(cr);
3744 FINISH;
3745}
3746
3747void dtgtk_liquify_cairo_paint_line_tool(cairo_t *cr, const gint x, const gint y, const gint w, const gint h,
3748 const gint flags, void *data)
3749{
3750 PREAMBLE(1, 1, 0, 0);
3751 cairo_move_to(cr, 0.1, 0.9);
3752 cairo_line_to(cr, 0.9, 0.1);
3753 cairo_stroke(cr);
3754 FINISH;
3755}
3756
3757void dtgtk_liquify_cairo_paint_curve_tool(cairo_t *cr, const gint x, const gint y, const gint w, const gint h,
3758 const gint flags, void *data)
3759{
3760 PREAMBLE(1, 1, 0, 0);
3761 cairo_move_to(cr, 0.1, 0.9);
3762 cairo_curve_to(cr, 0.1, 0.5, 0.5, 0.1, 0.9, 0.1);
3763 cairo_stroke(cr);
3764 FINISH;
3765}
3766
3767// clang-format off
3768// modelines: These editor modelines have been set for all relevant files by tools/update_modelines.py
3769// vim: shiftwidth=2 expandtab tabstop=2 cindent
3770// kate: tab-indents: off; indent-width 2; replace-tabs on; indent-mode cstyle; remove-trailing-spaces modified;
3771// clang-format on
static const float x
static const float const float C
const float top
const float delta
#define S(V, params)
static void dt_draw_rounded_rectangle_path(cairo_t *cr, float x, float y, float width, float height, float radius)
Definition draw.h:540
static void dt_draw_plus_sign(cairo_t *cr, float x, float y, float size, float line_width_scale)
Definition draw.h:561
static void set_color(cairo_t *cr, GdkRGBA color)
Definition draw.h:124
static void dt_draw_star(cairo_t *cr, float x, float y, float r1, float r2)
Definition draw.h:99
GdkRGBA color[]
Definition geotagging.c:539
float *const restrict const size_t k
#define dt_free(ptr)
Definition mem_alloc.h:97
uint32_t width
Definition mipmap_cache.c:0
uint32_t height
Definition mipmap_cache.c:1
size_t size
Definition mipmap_cache.c:3
dt_mipmap_buffer_dsc_flags flags
Definition mipmap_cache.c:4
#define lw
Definition retouch.c:1070
const float r
typedef double((*spd)(unsigned long int wavelength, double TempK))
const GdkRGBA * dt_widget_colorlabel(int index)
@ DT_WIDGET_COLORLABEL_RED
@ DT_WIDGET_COLORLABEL_PURPLE
@ DT_WIDGET_COLORLABEL_COUNT
@ DT_WIDGET_COLORLABEL_YELLOW
@ DT_WIDGET_COLORLABEL_GREEN
@ DT_WIDGET_COLORLABEL_BLUE
void dtgtk_cairo_paint_help(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_lt_mode_culling_dynamic(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_empty(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_circle(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_raster(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_bulb(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_modulegroup_basic(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_inverse(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_modulegroup_grading(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_paste_forms(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_local_copy(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_remove(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_brush(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_minus_simple(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_difference(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_module_switch_on(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_zoom(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_refresh(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_overexposed(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_bracket(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_ellipse(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
Paint a 45 deg-rotated ellipse that touches the unit square boundaries.
void dtgtk_cairo_paint_masks_gradient(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_andnot(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_dropdown(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_plusminus(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_audio(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_polygon(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_camera(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_switch(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_lt_mode_grid(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_label_sel(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_switch_on(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_or(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_pin(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_structure(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_compass_star(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_draw_structure(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_rect_portrait(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_liquify_cairo_paint_curve_tool(cairo_t *cr, const gint x, const gint y, const gint w, const gint h, const gint flags, void *data)
void dtgtk_cairo_paint_label_flower(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_modulegroup_favorites(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_gamut_check(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_presets(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_line_arrow(cairo_t *cr, gint x, int y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_showmask(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_modulegroup_correct(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_cut_forms(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_triangle(cairo_t *cr, gint x, int y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_tool_heal(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_uniform(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_modulegroup_tone(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_directory(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_tool_blur(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_auto_levels(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_lock(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_text_label(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_treelist(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_lt_mode_zoom(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_map_pin(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_tool_clone(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_union(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_styles(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_liquify_cairo_paint_line_tool(cairo_t *cr, const gint x, const gint y, const gint w, const gint h, const gint flags, void *data)
void dtgtk_cairo_paint_overlays(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_sortby(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_lt_mode_culling_fixed(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_colorpicker(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_multiinstance(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_filmstrip(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_vectorscope(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_plus(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_flip(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_reject(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_switch_deprecated(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_switch_inactive(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_square_plus(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_grid(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_drawn(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_brush_and_inverse(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_linear_scale(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_flowchart(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
Paint the flowchart icon using normalized 0..1 coordinates.
void dtgtk_cairo_paint_modulegroup_technical(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_exclusion(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_module_switch(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_check_mark(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
static void _rounded_rectangle(cairo_t *cr)
void dtgtk_cairo_paint_alignment(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_and(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_rawoverexposed(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_solid_triangle(cairo_t *cr, gint x, int y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_cancel(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_liquify_cairo_paint_node_tool(cairo_t *cr, const gint x, const gint y, const gint w, const gint h, const gint flags, void *data)
void _gradient_arc(cairo_t *cr, double lw, int nb_steps, double x_center, double y_center, double radius, double angle_from, double angle_to, double color_from, double color_to, double alpha)
void dtgtk_cairo_paint_eye_toggle(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_luv(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_modulegroup_effect(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_rect_landscape(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_perspective(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_colorpicker_set_values(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_reset(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_eye(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_multi(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_modulegroup_active(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_lt_mode_fullpreview(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_ryb(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_aspectflip(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
#define FINISH
void dtgtk_cairo_paint_star(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_plus_simple(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_solid_arrow(cairo_t *cr, gint x, int y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_modulegroup_color(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_display_wavelet_scale(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_unaltered(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_altered(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_drawn_and_parametric(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_unratestar(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_label(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_store(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_tool_fill(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_rgb_parade(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_polygon(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_waveform_overlaid(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_focus_peaking(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_jzazbz(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_logarithmic_scale(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_intersection(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_arrow(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_vertgradient(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_timer(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_multiply_small(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_shortcut(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_switch_off(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_sorting(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
#define M_PI
void dtgtk_cairo_paint_modulegroup_basics(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_softproof(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_link_chain(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_wand(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_display(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_grouping(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_parametric(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_preferences(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_invert(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void _compass_star(cairo_t *cr, double cx, double cy, double size)
static void _paint_cursor_arrow(cairo_t *cr, const double tip_x, const double tip_y, const double size)
Paint the cursor arrow using the arrow tip position and a uniform size.
static void _draw_triangle(cairo_t *cr, const gint flags)
void dtgtk_cairo_paint_color(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_waveform_scope(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_histogram_scope(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
#define PREAMBLE(scaling, line_scaling, x_offset, y_offset)
void dtgtk_cairo_paint_masks_used(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_masks_edit(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
void dtgtk_cairo_paint_link(cairo_t *cr, gint x, gint y, gint w, gint h, gint flags, void *data)
@ CPF_SPECIAL_FLAG
@ CPF_DIRECTION_LEFT
@ CPF_ALTER
@ CPF_DIRECTION_UP
@ CPF_DIRECTION_RIGHT
@ CPF_DIRECTION_DOWN
@ CPF_PRELIGHT
@ CPF_ACTIVE