1.12.42
[gnumeric.git] / src / pattern.c
blob911c897d8e89b83c7ea1b5a920886244774d004f
1 /*
2 * pattern.c : Support and specifications for patterns.
4 * Author:
5 * Jody Goldberg <jody@gnome.org>
7 * (C) 1999-2003 Jody Goldberg
8 */
9 #include <gnumeric-config.h>
10 #include <gnumeric.h>
11 #include <pattern.h>
13 #include <style-color.h>
15 #include <goffice/utils/go-pattern.h>
17 static const GOPatternType patterns[] = {
18 GO_PATTERN_SOLID, /* dummy filler */
19 GO_PATTERN_SOLID,
20 GO_PATTERN_GREY75,
21 GO_PATTERN_GREY50,
22 GO_PATTERN_GREY25,
23 GO_PATTERN_GREY125,
24 GO_PATTERN_GREY625,
25 GO_PATTERN_HORIZ,
26 GO_PATTERN_VERT,
27 GO_PATTERN_DIAG,
28 GO_PATTERN_REV_DIAG,
29 GO_PATTERN_DIAG_CROSS,
30 GO_PATTERN_THICK_DIAG_CROSS,
31 GO_PATTERN_THIN_HORIZ,
32 GO_PATTERN_THIN_VERT,
33 GO_PATTERN_THIN_REV_DIAG,
34 GO_PATTERN_THIN_DIAG,
35 GO_PATTERN_THIN_HORIZ_CROSS,
36 GO_PATTERN_THIN_DIAG_CROSS,
37 GO_PATTERN_SMALL_CIRCLES,
38 GO_PATTERN_SEMI_CIRCLES,
39 GO_PATTERN_THATCH,
40 GO_PATTERN_LARGE_CIRCLES,
41 GO_PATTERN_BRICKS,
42 GO_PATTERN_FOREGROUND_SOLID
45 /**
46 * gnm_pattern_background_set:
47 * @mstyle:
48 * @cr:
49 * @is_selected:
50 * @ctxt:
52 * Returns: %TRUE if there is a background to paint.
54 * Set up a cairo context to paint the background of a cell.
57 gboolean
58 gnm_pattern_background_set (GnmStyle const *mstyle, cairo_t *cr,
59 gboolean const is_selected, GtkStyleContext *ctxt)
61 int pattern;
63 g_return_val_if_fail (!is_selected || ctxt != NULL, FALSE);
66 * Draw the background if the PATTERN is non 0
67 * Draw a stipple too if the pattern is > 1
69 pattern = gnm_style_get_pattern (mstyle);
70 if (pattern > 0 && pattern < GNM_PATTERNS_MAX) {
71 GOPattern gopat;
72 cairo_pattern_t *crpat;
73 gopat.pattern = patterns[pattern];
74 gopat.fore = gnm_style_get_pattern_color (mstyle)->go_color;
75 gopat.back = gnm_style_get_back_color (mstyle)->go_color;
76 if (is_selected) {
77 GOColor light;
78 GdkRGBA rgba;
79 gtk_style_context_get_background_color
80 (ctxt, GTK_STATE_FLAG_SELECTED, &rgba);
81 light = GO_COLOR_FROM_GDK_RGBA (rgba);
82 gopat.fore = GO_COLOR_INTERPOLATE (light, gopat.fore, .5);
83 gopat.back = GO_COLOR_INTERPOLATE (light, gopat.back, .5);
85 crpat = go_pattern_create_cairo_pattern (&gopat, cr);
86 if (crpat)
87 cairo_set_source (cr, crpat);
88 cairo_pattern_destroy (crpat);
89 return TRUE;
90 } else if (is_selected) {
91 GdkRGBA rgba;
92 GOColor color;
94 gtk_style_context_get_background_color (ctxt, GTK_STATE_FLAG_SELECTED, &rgba);
95 color = GO_COLOR_FROM_GDK_RGBA (rgba);
96 /* Make a lighter version. */
97 color = GO_COLOR_INTERPOLATE (GO_COLOR_WHITE, color, .5);
98 cairo_set_source_rgba (cr, GO_COLOR_TO_CAIRO (color));
100 return FALSE;