File: primitives.h

package info (click to toggle)
wlmaker 0.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,884 kB
  • sloc: ansic: 54,832; xml: 1,424; python: 1,400; yacc: 118; lex: 70; sh: 16; makefile: 8
file content (176 lines) | stat: -rw-r--r-- 4,432 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/* ========================================================================= */
/**
 * @file primitives.h
 *
 * @copyright
 * Copyright 2023 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#ifndef __WLMTK_PRIMITIVES_H__
#define __WLMTK_PRIMITIVES_H__

#include <cairo.h>
#include <libbase/libbase.h>
#include <stdbool.h>
#include <stdint.h>

#include "style.h"

#ifdef __cplusplus
extern "C" {
#endif  // __cplusplus

/**
 * Completely fills the cairo with the specified style.
 *
 * @param cairo_ptr           A cairo, backed by an image surface.
 * @param fill_ptr
 */
void wlmaker_primitives_cairo_fill(
    cairo_t *cairo_ptr,
    const wlmtk_style_fill_t *fill_ptr);

/**
 * Fills the cairo with the specified style at the specified rectangle.
 *
 * @param cairo_ptr           A cairo, backed by an image surface.
 * @param x
 * @param y
 * @param width
 * @param height
 * @param fill_ptr
 */
void wlmaker_primitives_cairo_fill_at(
    cairo_t *cairo_ptr,
    int x,
    int y,
    unsigned width,
    unsigned height,
    const wlmtk_style_fill_t *fill_ptr);

/**
 * Sets the bezel color.
 *
 * Note: Window Maker draws the bezel by adding 80 (0x50) to each R, G, B of
 * the underlying title for the illuminated side; respectively by subtracting
 * 40 (0x28) on the non-illuminated side.
 * We are using cairo's overlaying with the respective "alpha" values below,
 * which leads to different results.
 *
 * @param cairo_ptr
 * @param illuminated
 */
void wlmaker_primitives_set_bezel_color(
    cairo_t *cairo_ptr,
    bool illuminated);

/**
 * Draws a bezel into the cairo.
 *
 * @param cairo_ptr           A cairo, backed by an image surface.
 * @param bezel_width
 * @param raised              Whether the bezel is to highlight a raised (true)
 *                            or pressed (false) state.
 */
void wlmaker_primitives_draw_bezel(
    cairo_t *cairo_ptr,
    double bezel_width,
    bool raised);

/**
 * Draws a bezel into the cairo, at specified position and width/height.
 *
 * @param cairo_ptr           A cairo, backed by an image surface.
 * @param x
 * @param y
 * @param width
 * @param height
 * @param bezel_width
 * @param raised              Whether the bezel is to highlight a raised (true)
 *                            or pressed (false) state.
 */
void wlmaker_primitives_draw_bezel_at(
    cairo_t *cairo_ptr,
    int x,
    int y,
    unsigned width,
    unsigned height,
    double bezel_width,
    bool raised);

/**
 * Draws the "minimize" icon, as used in the title bar.
 *
 * @param cairo_ptr
 * @param size
 * @param color
 */
void wlmaker_primitives_draw_minimize_icon(
    cairo_t *cairo_ptr,
    int size,
    uint32_t color);

/**
 * Draws the "close" icon, as used in the title bar.
 *
 * @param cairo_ptr
 * @param size
 * @param color
 */
void wlmaker_primitives_draw_close_icon(
    cairo_t *cairo_ptr,
    int size,
    uint32_t color);

/**
 * Draws the window title into the `cairo_t`.
 *
 * @param cairo_ptr
 * @param font_style_ptr      The font style to use.
 * @param title_ptr           Title string, or NULL.
 * @param color               As an ARGB 8888 value.
 */
void wlmaker_primitives_draw_window_title(
    cairo_t *cairo_ptr,
    const wlmtk_style_font_t *font_style_ptr,
    const char *title_ptr,
    uint32_t color);

/**
 * Draws the text with given parameters into the `cairo_t` at (x, y).
 *
 * @param cairo_ptr
 * @param x
 * @param y
 * @param font_style_ptr
 * @param color
 * @param text_ptr
 */
void wlmaker_primitives_draw_text(
    cairo_t *cairo_ptr,
    int x,
    int y,
    const wlmtk_style_font_t *font_style_ptr,
    uint32_t color,
    const char *text_ptr);

/** Unit tests. */
extern const bs_test_case_t   wlmaker_primitives_test_cases[];

#ifdef __cplusplus
}  // extern "C"
#endif  // __cplusplus

#endif /* __WLMTK_PRIMITIVES_H__ */
/* == End of primitives.h ================================================== */