Coverage Report

Created: 2025-07-16 07:53

/src/qtbase/src/3rdparty/harfbuzz-ng/src/hb-outline.hh
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright © 2023  Behdad Esfahbod
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
#ifndef HB_OUTLINE_HH
26
#define HB_OUTLINE_HH
27
28
#include "hb.hh"
29
30
#include "hb-draw.hh"
31
32
33
struct hb_outline_point_t
34
{
35
  enum class type_t
36
  {
37
    MOVE_TO,
38
    LINE_TO,
39
    QUADRATIC_TO,
40
    CUBIC_TO,
41
  };
42
43
  hb_outline_point_t (float x, float y, type_t type) :
44
0
    x (x), y (y), type (type) {}
45
46
  float x, y;
47
  type_t type;
48
};
49
50
struct hb_outline_vector_t
51
{
52
  float normalize_len ()
53
0
  {
54
0
    float len = hypotf (x, y);
55
0
    if (len)
56
0
    {
57
0
      x /= len;
58
0
      y /= len;
59
0
    }
60
0
    return len;
61
0
  }
62
63
  float x, y;
64
};
65
66
struct hb_outline_t
67
{
68
0
  void reset () { points.shrink (0, false); contours.resize (0); }
69
70
  HB_INTERNAL void replay (hb_draw_funcs_t *pen, void *pen_data) const;
71
  HB_INTERNAL float control_area () const;
72
  HB_INTERNAL void slant (float slant_xy);
73
  HB_INTERNAL void embolden (float x_strength, float y_strength,
74
           float x_shift, float y_shift);
75
76
  hb_vector_t<hb_outline_point_t> points;
77
  hb_vector_t<unsigned> contours;
78
};
79
80
HB_INTERNAL hb_draw_funcs_t *
81
hb_outline_recording_pen_get_funcs ();
82
83
84
#endif /* HB_OUTLINE_HH */