Coverage Report

Created: 2023-06-07 06:14

/src/harfbuzz/src/hb-subset-instancer-solver.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_SUBSET_INSTANCER_SOLVER_HH
26
#define HB_SUBSET_INSTANCER_SOLVER_HH
27
28
#include "hb.hh"
29
30
struct Triple {
31
32
  Triple () :
33
0
    minimum (0.f), middle (0.f), maximum (0.f) {}
34
35
  Triple (float minimum_, float middle_, float maximum_) :
36
0
    minimum (minimum_), middle (middle_), maximum (maximum_) {}
37
38
  bool operator == (const Triple &o) const
39
0
  {
40
0
    return minimum == o.minimum &&
41
0
     middle  == o.middle  &&
42
0
     maximum == o.maximum;
43
0
  }
44
45
  bool is_point () const
46
0
  { return minimum == middle && middle == maximum; }
47
48
  bool contains (float point) const
49
0
  { return minimum <= point && point <= maximum; }
50
51
  float minimum;
52
  float middle;
53
  float maximum;
54
};
55
56
using result_item_t = hb_pair_t<float, Triple>;
57
using result_t = hb_vector_t<result_item_t>;
58
59
/* Given a tuple (lower,peak,upper) "tent" and new axis limits
60
 * (axisMin,axisDefault,axisMax), solves how to represent the tent
61
 * under the new axis configuration.  All values are in normalized
62
 * -1,0,+1 coordinate system. Tent values can be outside this range.
63
 *
64
 * Return value: a list of tuples. Each tuple is of the form
65
 * (scalar,tent), where scalar is a multipler to multiply any
66
 * delta-sets by, and tent is a new tent for that output delta-set.
67
 * If tent value is Triple{}, that is a special deltaset that should
68
 * be always-enabled (called "gain").
69
 */
70
HB_INTERNAL result_t rebase_tent (Triple tent, Triple axisLimit);
71
72
#endif /* HB_SUBSET_INSTANCER_SOLVER_HH */