Ebrahim Byagowi | f883c31 | 2019-10-13 12:31:53 +0330 | [diff] [blame] | 1 | /* |
Ebrahim Byagowi | 017f606 | 2020-01-10 20:44:15 +0330 | [diff] [blame] | 2 | * Copyright © 2019-2020 Ebrahim Byagowi |
Ebrahim Byagowi | f883c31 | 2019-10-13 12:31:53 +0330 | [diff] [blame] | 3 | * |
| 4 | * This is part of HarfBuzz, a text shaping library. |
| 5 | * |
| 6 | * Permission is hereby granted, without written agreement and without |
| 7 | * license or royalty fees, to use, copy, modify, and distribute this |
| 8 | * software and its documentation for any purpose, provided that the |
| 9 | * above copyright notice and the following two paragraphs appear in |
| 10 | * all copies of this software. |
| 11 | * |
| 12 | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR |
| 13 | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES |
| 14 | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN |
| 15 | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH |
| 16 | * DAMAGE. |
| 17 | * |
| 18 | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
| 19 | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
| 20 | * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS |
| 21 | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO |
| 22 | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
| 23 | */ |
| 24 | |
| 25 | #include "hb.hh" |
| 26 | |
Ebrahim Byagowi | ac81e94 | 2020-01-28 12:34:47 +0330 | [diff] [blame] | 27 | #ifndef HB_NO_DRAW |
Ebrahim Byagowi | f883c31 | 2019-10-13 12:31:53 +0330 | [diff] [blame] | 28 | |
Ebrahim Byagowi | ac81e94 | 2020-01-28 12:34:47 +0330 | [diff] [blame] | 29 | #include "hb-draw.hh" |
Ebrahim Byagowi | f883c31 | 2019-10-13 12:31:53 +0330 | [diff] [blame] | 30 | |
Khaled Hosny | 8e892bd | 2022-02-08 19:36:29 +0200 | [diff] [blame] | 31 | /** |
| 32 | * SECTION:hb-draw |
| 33 | * @title: hb-draw |
| 34 | * @short_description: Glyph drawing |
| 35 | * @include: hb.h |
| 36 | * |
| 37 | * Functions for drawing (extracting) glyph shapes. |
| 38 | **/ |
| 39 | |
Behdad Esfahbod | 2bed4f4 | 2022-02-02 21:42:48 -0600 | [diff] [blame] | 40 | static void |
| 41 | hb_draw_move_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED, |
Behdad Esfahbod | f1a9a9c | 2022-02-03 14:10:40 -0600 | [diff] [blame] | 42 | hb_draw_state_t *st HB_UNUSED, |
Behdad Esfahbod | 2bed4f4 | 2022-02-02 21:42:48 -0600 | [diff] [blame] | 43 | float to_x HB_UNUSED, float to_y HB_UNUSED, |
| 44 | void *user_data HB_UNUSED) {} |
| 45 | |
| 46 | static void |
| 47 | hb_draw_line_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED, |
Behdad Esfahbod | f1a9a9c | 2022-02-03 14:10:40 -0600 | [diff] [blame] | 48 | hb_draw_state_t *st HB_UNUSED, |
Behdad Esfahbod | 2bed4f4 | 2022-02-02 21:42:48 -0600 | [diff] [blame] | 49 | float to_x HB_UNUSED, float to_y HB_UNUSED, |
| 50 | void *user_data HB_UNUSED) {} |
| 51 | |
| 52 | static void |
Behdad Esfahbod | a357e5d | 2022-02-03 14:42:56 -0600 | [diff] [blame] | 53 | hb_draw_quadratic_to_nil (hb_draw_funcs_t *dfuncs, void *draw_data, |
| 54 | hb_draw_state_t *st, |
| 55 | float control_x, float control_y, |
| 56 | float to_x, float to_y, |
Behdad Esfahbod | 2ce19f2 | 2022-02-05 15:01:15 -0600 | [diff] [blame] | 57 | void *user_data HB_UNUSED) |
Behdad Esfahbod | a357e5d | 2022-02-03 14:42:56 -0600 | [diff] [blame] | 58 | { |
Behdad Esfahbod | 36dd5d3 | 2022-06-26 16:16:43 -0600 | [diff] [blame] | 59 | #define HB_ONE_THIRD 0.33333333f |
Behdad Esfahbod | a357e5d | 2022-02-03 14:42:56 -0600 | [diff] [blame] | 60 | dfuncs->emit_cubic_to (draw_data, *st, |
Behdad Esfahbod | 36dd5d3 | 2022-06-26 16:16:43 -0600 | [diff] [blame] | 61 | (st->current_x + 2.f * control_x) * HB_ONE_THIRD, |
| 62 | (st->current_y + 2.f * control_y) * HB_ONE_THIRD, |
| 63 | (to_x + 2.f * control_x) * HB_ONE_THIRD, |
| 64 | (to_y + 2.f * control_y) * HB_ONE_THIRD, |
Behdad Esfahbod | a357e5d | 2022-02-03 14:42:56 -0600 | [diff] [blame] | 65 | to_x, to_y); |
Behdad Esfahbod | 36dd5d3 | 2022-06-26 16:16:43 -0600 | [diff] [blame] | 66 | #undef HB_ONE_THIRD |
Behdad Esfahbod | a357e5d | 2022-02-03 14:42:56 -0600 | [diff] [blame] | 67 | } |
Behdad Esfahbod | 2bed4f4 | 2022-02-02 21:42:48 -0600 | [diff] [blame] | 68 | |
| 69 | static void |
| 70 | hb_draw_cubic_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED, |
Behdad Esfahbod | f1a9a9c | 2022-02-03 14:10:40 -0600 | [diff] [blame] | 71 | hb_draw_state_t *st HB_UNUSED, |
Behdad Esfahbod | 2bed4f4 | 2022-02-02 21:42:48 -0600 | [diff] [blame] | 72 | float control1_x HB_UNUSED, float control1_y HB_UNUSED, |
| 73 | float control2_x HB_UNUSED, float control2_y HB_UNUSED, |
| 74 | float to_x HB_UNUSED, float to_y HB_UNUSED, |
| 75 | void *user_data HB_UNUSED) {} |
| 76 | |
| 77 | static void |
| 78 | hb_draw_close_path_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED, |
Behdad Esfahbod | f1a9a9c | 2022-02-03 14:10:40 -0600 | [diff] [blame] | 79 | hb_draw_state_t *st HB_UNUSED, |
Behdad Esfahbod | 2bed4f4 | 2022-02-02 21:42:48 -0600 | [diff] [blame] | 80 | void *user_data HB_UNUSED) {} |
| 81 | |
| 82 | |
| 83 | #define HB_DRAW_FUNC_IMPLEMENT(name) \ |
| 84 | \ |
| 85 | void \ |
| 86 | hb_draw_funcs_set_##name##_func (hb_draw_funcs_t *dfuncs, \ |
| 87 | hb_draw_##name##_func_t func, \ |
| 88 | void *user_data, \ |
| 89 | hb_destroy_func_t destroy) \ |
| 90 | { \ |
| 91 | if (hb_object_is_immutable (dfuncs)) \ |
| 92 | return; \ |
| 93 | \ |
Behdad Esfahbod | e0a5231 | 2022-06-16 13:24:02 -0600 | [diff] [blame] | 94 | if (dfuncs->destroy && dfuncs->destroy->name) \ |
| 95 | dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name); \ |
| 96 | \ |
| 97 | if (user_data && !dfuncs->user_data) \ |
| 98 | { \ |
| 99 | dfuncs->user_data = (decltype (dfuncs->user_data)) hb_calloc (1, sizeof (*dfuncs->user_data)); \ |
| 100 | if (unlikely (!dfuncs->user_data)) \ |
| 101 | goto fail; \ |
| 102 | } \ |
| 103 | if (destroy && !dfuncs->destroy) \ |
| 104 | { \ |
| 105 | dfuncs->destroy = (decltype (dfuncs->destroy)) hb_calloc (1, sizeof (*dfuncs->destroy)); \ |
| 106 | if (unlikely (!dfuncs->destroy)) \ |
| 107 | goto fail; \ |
| 108 | } \ |
| 109 | \ |
| 110 | if (func) { \ |
| 111 | dfuncs->func.name = func; \ |
| 112 | if (dfuncs->user_data) \ |
| 113 | dfuncs->user_data->name = user_data; \ |
| 114 | if (dfuncs->destroy) \ |
| 115 | dfuncs->destroy->name = destroy; \ |
| 116 | } else { \ |
| 117 | dfuncs->func.name = hb_draw_##name##_nil; \ |
| 118 | if (dfuncs->user_data) \ |
| 119 | dfuncs->user_data->name = nullptr; \ |
| 120 | if (dfuncs->destroy) \ |
| 121 | dfuncs->destroy->name = nullptr; \ |
| 122 | } \ |
Behdad Esfahbod | f8544cb | 2022-07-12 11:52:33 -0600 | [diff] [blame] | 123 | return; \ |
Behdad Esfahbod | e0a5231 | 2022-06-16 13:24:02 -0600 | [diff] [blame] | 124 | \ |
| 125 | fail: \ |
| 126 | if (destroy) \ |
| 127 | destroy (user_data); \ |
Behdad Esfahbod | 2bed4f4 | 2022-02-02 21:42:48 -0600 | [diff] [blame] | 128 | } |
| 129 | |
| 130 | HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS |
| 131 | #undef HB_DRAW_FUNC_IMPLEMENT |
| 132 | |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 133 | /** |
Behdad Esfahbod | f78a250 | 2022-06-05 00:55:35 -0600 | [diff] [blame] | 134 | * hb_draw_funcs_create: |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 135 | * |
Ebrahim Byagowi | 920dca4 | 2020-01-30 18:03:06 +0330 | [diff] [blame] | 136 | * Creates a new draw callbacks object. |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 137 | * |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 138 | * Return value: (transfer full): |
| 139 | * A newly allocated #hb_draw_funcs_t with a reference count of 1. The initial |
| 140 | * reference count should be released with hb_draw_funcs_destroy when you are |
Khaled Hosny | 98e90cc | 2022-06-30 08:43:57 +0200 | [diff] [blame] | 141 | * done using the #hb_draw_funcs_t. This function never returns `NULL`. If |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 142 | * memory cannot be allocated, a special singleton #hb_draw_funcs_t object will |
| 143 | * be returned. |
| 144 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 145 | * Since: 4.0.0 |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 146 | **/ |
Ebrahim Byagowi | ac81e94 | 2020-01-28 12:34:47 +0330 | [diff] [blame] | 147 | hb_draw_funcs_t * |
| 148 | hb_draw_funcs_create () |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 149 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 150 | hb_draw_funcs_t *dfuncs; |
| 151 | if (unlikely (!(dfuncs = hb_object_create<hb_draw_funcs_t> ()))) |
Ebrahim Byagowi | ac81e94 | 2020-01-28 12:34:47 +0330 | [diff] [blame] | 152 | return const_cast<hb_draw_funcs_t *> (&Null (hb_draw_funcs_t)); |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 153 | |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 154 | dfuncs->func = Null (hb_draw_funcs_t).func; |
Behdad Esfahbod | d6b61df | 2022-02-05 13:46:48 -0600 | [diff] [blame] | 155 | |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 156 | return dfuncs; |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 157 | } |
| 158 | |
Behdad Esfahbod | 2bed4f4 | 2022-02-02 21:42:48 -0600 | [diff] [blame] | 159 | DEFINE_NULL_INSTANCE (hb_draw_funcs_t) = |
| 160 | { |
| 161 | HB_OBJECT_HEADER_STATIC, |
| 162 | |
| 163 | { |
| 164 | #define HB_DRAW_FUNC_IMPLEMENT(name) hb_draw_##name##_nil, |
| 165 | HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS |
| 166 | #undef HB_DRAW_FUNC_IMPLEMENT |
| 167 | } |
| 168 | }; |
| 169 | |
Behdad Esfahbod | 2bed4f4 | 2022-02-02 21:42:48 -0600 | [diff] [blame] | 170 | |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 171 | /** |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 172 | * hb_draw_funcs_reference: (skip) |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 173 | * @dfuncs: draw functions |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 174 | * |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 175 | * Increases the reference count on @dfuncs by one. This prevents @buffer from |
| 176 | * being destroyed until a matching call to hb_draw_funcs_destroy() is made. |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 177 | * |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 178 | * Return value: (transfer full): |
| 179 | * The referenced #hb_draw_funcs_t. |
| 180 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 181 | * Since: 4.0.0 |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 182 | **/ |
Ebrahim Byagowi | ac81e94 | 2020-01-28 12:34:47 +0330 | [diff] [blame] | 183 | hb_draw_funcs_t * |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 184 | hb_draw_funcs_reference (hb_draw_funcs_t *dfuncs) |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 185 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 186 | return hb_object_reference (dfuncs); |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 187 | } |
| 188 | |
| 189 | /** |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 190 | * hb_draw_funcs_destroy: (skip) |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 191 | * @dfuncs: draw functions |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 192 | * |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 193 | * Deallocate the @dfuncs. |
| 194 | * Decreases the reference count on @dfuncs by one. If the result is zero, then |
| 195 | * @dfuncs and all associated resources are freed. See hb_draw_funcs_reference(). |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 196 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 197 | * Since: 4.0.0 |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 198 | **/ |
| 199 | void |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 200 | hb_draw_funcs_destroy (hb_draw_funcs_t *dfuncs) |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 201 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 202 | if (!hb_object_destroy (dfuncs)) return; |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 203 | |
Behdad Esfahbod | e0a5231 | 2022-06-16 13:24:02 -0600 | [diff] [blame] | 204 | if (dfuncs->destroy) |
| 205 | { |
Behdad Esfahbod | cdf1cb3 | 2022-02-07 19:05:52 -0600 | [diff] [blame] | 206 | #define HB_DRAW_FUNC_IMPLEMENT(name) \ |
Behdad Esfahbod | e0a5231 | 2022-06-16 13:24:02 -0600 | [diff] [blame] | 207 | if (dfuncs->destroy->name) dfuncs->destroy->name (!dfuncs->user_data ? nullptr : dfuncs->user_data->name); |
| 208 | HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS |
Behdad Esfahbod | cdf1cb3 | 2022-02-07 19:05:52 -0600 | [diff] [blame] | 209 | #undef HB_DRAW_FUNC_IMPLEMENT |
Behdad Esfahbod | e0a5231 | 2022-06-16 13:24:02 -0600 | [diff] [blame] | 210 | } |
Behdad Esfahbod | cdf1cb3 | 2022-02-07 19:05:52 -0600 | [diff] [blame] | 211 | |
Behdad Esfahbod | 46a3677 | 2022-07-12 12:03:00 -0600 | [diff] [blame] | 212 | hb_free (dfuncs->destroy); |
| 213 | hb_free (dfuncs->user_data); |
| 214 | |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 215 | hb_free (dfuncs); |
Ebrahim Byagowi | ec1fba1 | 2020-01-13 19:31:18 +0330 | [diff] [blame] | 216 | } |
| 217 | |
| 218 | /** |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 219 | * hb_draw_funcs_make_immutable: |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 220 | * @dfuncs: draw functions |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 221 | * |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 222 | * Makes @dfuncs object immutable. |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 223 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 224 | * Since: 4.0.0 |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 225 | **/ |
| 226 | void |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 227 | hb_draw_funcs_make_immutable (hb_draw_funcs_t *dfuncs) |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 228 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 229 | if (hb_object_is_immutable (dfuncs)) |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 230 | return; |
| 231 | |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 232 | hb_object_make_immutable (dfuncs); |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 233 | } |
| 234 | |
| 235 | /** |
| 236 | * hb_draw_funcs_is_immutable: |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 237 | * @dfuncs: draw functions |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 238 | * |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 239 | * Checks whether @dfuncs is immutable. |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 240 | * |
Khaled Hosny | 98e90cc | 2022-06-30 08:43:57 +0200 | [diff] [blame] | 241 | * Return value: `true` if @dfuncs is immutable, `false` otherwise |
Khaled Hosny | f942874 | 2022-02-12 01:43:11 +0200 | [diff] [blame] | 242 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 243 | * Since: 4.0.0 |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 244 | **/ |
| 245 | hb_bool_t |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 246 | hb_draw_funcs_is_immutable (hb_draw_funcs_t *dfuncs) |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 247 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 248 | return hb_object_is_immutable (dfuncs); |
Ebrahim Byagowi | b4d3bf1 | 2020-02-02 14:32:38 +0330 | [diff] [blame] | 249 | } |
| 250 | |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 251 | |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 252 | /** |
| 253 | * hb_draw_move_to: |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 254 | * @dfuncs: draw functions |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 255 | * @draw_data: associated draw data passed by the caller |
| 256 | * @st: current draw state |
| 257 | * @to_x: X component of target point |
| 258 | * @to_y: Y component of target point |
| 259 | * |
| 260 | * Perform a "move-to" draw operation. |
| 261 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 262 | * Since: 4.0.0 |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 263 | **/ |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 264 | void |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 265 | hb_draw_move_to (hb_draw_funcs_t *dfuncs, void *draw_data, |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 266 | hb_draw_state_t *st, |
| 267 | float to_x, float to_y) |
| 268 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 269 | dfuncs->move_to (draw_data, *st, |
| 270 | to_x, to_y); |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 271 | } |
| 272 | |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 273 | /** |
| 274 | * hb_draw_line_to: |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 275 | * @dfuncs: draw functions |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 276 | * @draw_data: associated draw data passed by the caller |
| 277 | * @st: current draw state |
| 278 | * @to_x: X component of target point |
| 279 | * @to_y: Y component of target point |
| 280 | * |
| 281 | * Perform a "line-to" draw operation. |
| 282 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 283 | * Since: 4.0.0 |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 284 | **/ |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 285 | void |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 286 | hb_draw_line_to (hb_draw_funcs_t *dfuncs, void *draw_data, |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 287 | hb_draw_state_t *st, |
| 288 | float to_x, float to_y) |
| 289 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 290 | dfuncs->line_to (draw_data, *st, |
| 291 | to_x, to_y); |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 292 | } |
| 293 | |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 294 | /** |
| 295 | * hb_draw_quadratic_to: |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 296 | * @dfuncs: draw functions |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 297 | * @draw_data: associated draw data passed by the caller |
| 298 | * @st: current draw state |
| 299 | * @control_x: X component of control point |
| 300 | * @control_y: Y component of control point |
| 301 | * @to_x: X component of target point |
| 302 | * @to_y: Y component of target point |
| 303 | * |
| 304 | * Perform a "quadratic-to" draw operation. |
| 305 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 306 | * Since: 4.0.0 |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 307 | **/ |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 308 | void |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 309 | hb_draw_quadratic_to (hb_draw_funcs_t *dfuncs, void *draw_data, |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 310 | hb_draw_state_t *st, |
| 311 | float control_x, float control_y, |
| 312 | float to_x, float to_y) |
| 313 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 314 | dfuncs->quadratic_to (draw_data, *st, |
| 315 | control_x, control_y, |
| 316 | to_x, to_y); |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 317 | } |
| 318 | |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 319 | /** |
| 320 | * hb_draw_cubic_to: |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 321 | * @dfuncs: draw functions |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 322 | * @draw_data: associated draw data passed by the caller |
| 323 | * @st: current draw state |
| 324 | * @control1_x: X component of first control point |
| 325 | * @control1_y: Y component of first control point |
| 326 | * @control2_x: X component of second control point |
| 327 | * @control2_y: Y component of second control point |
| 328 | * @to_x: X component of target point |
| 329 | * @to_y: Y component of target point |
| 330 | * |
| 331 | * Perform a "cubic-to" draw operation. |
| 332 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 333 | * Since: 4.0.0 |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 334 | **/ |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 335 | void |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 336 | hb_draw_cubic_to (hb_draw_funcs_t *dfuncs, void *draw_data, |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 337 | hb_draw_state_t *st, |
| 338 | float control1_x, float control1_y, |
| 339 | float control2_x, float control2_y, |
| 340 | float to_x, float to_y) |
| 341 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 342 | dfuncs->cubic_to (draw_data, *st, |
| 343 | control1_x, control1_y, |
| 344 | control2_x, control2_y, |
| 345 | to_x, to_y); |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 346 | } |
| 347 | |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 348 | /** |
| 349 | * hb_draw_close_path: |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 350 | * @dfuncs: draw functions |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 351 | * @draw_data: associated draw data passed by the caller |
| 352 | * @st: current draw state |
| 353 | * |
| 354 | * Perform a "close-path" draw operation. |
| 355 | * |
Khaled Hosny | 8d1b000 | 2022-03-01 21:27:32 +0200 | [diff] [blame] | 356 | * Since: 4.0.0 |
Behdad Esfahbod | 2376230 | 2022-02-07 18:23:26 -0600 | [diff] [blame] | 357 | **/ |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 358 | void |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 359 | hb_draw_close_path (hb_draw_funcs_t *dfuncs, void *draw_data, |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 360 | hb_draw_state_t *st) |
| 361 | { |
Behdad Esfahbod | c56c137 | 2022-02-07 18:38:00 -0600 | [diff] [blame] | 362 | dfuncs->close_path (draw_data, *st); |
Behdad Esfahbod | a9dd9f0 | 2022-02-03 13:58:36 -0600 | [diff] [blame] | 363 | } |
| 364 | |
| 365 | |
Ebrahim Byagowi | f883c31 | 2019-10-13 12:31:53 +0330 | [diff] [blame] | 366 | #endif |