font_metrics.h
1 /*
2 ** UICore
3 ** Copyright (c) 1997-2015 The UICore Team
4 **
5 ** This software is provided 'as-is', without any express or implied
6 ** warranty. In no event will the authors be held liable for any damages
7 ** arising from the use of this software.
8 **
9 ** Permission is granted to anyone to use this software for any purpose,
10 ** including commercial applications, and to alter it and redistribute it
11 ** freely, subject to the following restrictions:
12 **
13 ** 1. The origin of this software must not be misrepresented; you must not
14 ** claim that you wrote the original software. If you use this software
15 ** in a product, an acknowledgment in the product documentation would be
16 ** appreciated but is not required.
17 ** 2. Altered source versions must be plainly marked as such, and must not be
18 ** misrepresented as being the original software.
19 ** 3. This notice may not be removed or altered from any source distribution.
20 **
21 ** Note: Some of the libraries UICore may link to may have additional
22 ** requirements or restrictions.
23 **
24 ** File Author(s):
25 **
26 ** Magnus Norddahl
27 ** Harry Storbacka
28 ** Mark Page
29 */
30 
31 #pragma once
32 
33 #include <memory>
34 #include <cmath>
35 
36 namespace uicore
37 {
42  {
43  public:
44  // \brief Text metrics constructor
45  // \param line_height If 0, then line_height is calculated as height + external_leading
47  FontMetrics(float height, float ascent, float descent, float internal_leading, float external_leading, float line_height, float pixel_ratio)
48  : _height(height), _ascent(ascent), _descent(descent), _internal_leading(internal_leading), _external_leading(external_leading), _line_height(line_height)
49  {
50  // Calculate line_height when not specified
51  if (_line_height == 0.0f)
52  _line_height = height + external_leading;
53 
54  _baseline_offset = (_line_height - _height) * 0.5f + ascent;
55  _baseline_offset = std::round(_baseline_offset / pixel_ratio) * pixel_ratio;
56  }
57 
59  float height() const { return _height; }
60 
62  float line_height() const { return _line_height; }
63 
65  float baseline_offset() const { return _baseline_offset; }
66 
68  float ascent() const { return _ascent; }
69 
71  float descent() const { return _descent; }
72 
74  float internal_leading() const { return _internal_leading; }
75 
77  float external_leading() const { return _external_leading; }
78 
79  private:
80  float _height = 0.0f;
81  float _ascent = 0.0f;
82  float _descent = 0.0f;
83  float _internal_leading = 0.0f;
84  float _external_leading = 0.0f;
85  float _line_height = 0.0f;
86  float _baseline_offset = 0.0f;
87  };
88 }
float baseline_offset() const
Returns the baseline offset from the top of a line.
Definition: font_metrics.h:65
float line_height() const
Return the distance between lines.
Definition: font_metrics.h:62
FontMetrics(float height, float ascent, float descent, float internal_leading, float external_leading, float line_height, float pixel_ratio)
Definition: font_metrics.h:47
Font metrics class.
Definition: font_metrics.h:41
float descent() const
Returns the font descender.
Definition: font_metrics.h:71
FontMetrics()
Definition: font_metrics.h:46
float height() const
Returns the height of the font.
Definition: font_metrics.h:59
float internal_leading() const
Returns the amount of leading (space) inside the bounds set by the height() function.
Definition: font_metrics.h:74
float external_leading() const
Returns the amount of extra leading (space) that to add between rows.
Definition: font_metrics.h:77
float ascent() const
Returns the font ascender.
Definition: font_metrics.h:68
Definition: Application/application.h:35