xtd - Reference Guide  0.2.0
Modern c++17/20 framework to create console, GUI and unit test applications on Windows, macOS, Linux, iOS and android.
font.h
Go to the documentation of this file.
1 #pragma once
5 #include <cstdint>
6 #include <memory>
7 #include <ostream>
8 #include <stdexcept>
9 #include <vector>
10 #include <xtd/object.h>
11 #include <xtd/ustring.h>
12 #include "../drawing_export.h"
13 #include "font_family.h"
14 #include "graphics_unit.h"
15 
17 namespace xtd {
19  namespace forms {
20  namespace native {
21  class font_dialog;
22  }
23  }
25 
27  namespace drawing {
29  class graphics;
30  class system_fonts;
32 
39  class drawing_export_ font final : public object {
40  public:
44  font (const font& prototype, float em_size);
45 
50  font (const font& prototype, float em_size, font_style style);
51 
55  font (const font& prototype, font_style style);
56 
66  font(xtd::ustring family_name, float em_size, font_style style, graphics_unit unit, uint8_t gdi_char_set, bool gdi_vertical_font);
67 
77  font(const drawing::font_family& font_family, float em_size, font_style style, graphics_unit unit, uint8_t gdi_char_set, bool gdi_vertical_font) : font(font_family.name(), em_size, style, unit, gdi_char_set, gdi_vertical_font) {}
78 
87  font(xtd::ustring family_name, float em_size, font_style style, graphics_unit unit, uint8_t gdi_char_set) : font(family_name, em_size, style, unit, gdi_char_set, false) {}
88 
97  font(const drawing::font_family& font_family, float em_size, font_style style, graphics_unit unit, uint8_t gdi_char_set) : font(font_family, em_size, style, unit, gdi_char_set, false) {}
98 
105  font(xtd::ustring family_name, float em_size, font_style style, graphics_unit unit) : font(family_name, em_size, style, unit, 0, false) {}
106 
113  font(const drawing::font_family& font_family, float em_size, font_style style, graphics_unit unit) : font(font_family, em_size, style, unit, 0, false) {}
114 
120  font(xtd::ustring family_name, float em_size, font_style style) : font(family_name, em_size, style, graphics_unit::point, 0, false) {}
121 
127  font(const drawing::font_family& font_family, float em_size, font_style style) : font(font_family, em_size, style, graphics_unit::point, 0, false) {}
128 
134  font(xtd::ustring family_name, float em_size, graphics_unit unit) : font(family_name, em_size, font_style::regular, unit, 0, false) {}
135 
141  font(const drawing::font_family& font_family, float em_size, graphics_unit unit) : font(font_family, em_size, font_style::regular, unit, 0, false) {}
142 
147  font(xtd::ustring family_name, float em_size) : font(family_name, em_size, font_style::regular, graphics_unit::point, 0, false) {}
148 
153  font(const drawing::font_family& font_family, float em_size) : font(font_family, em_size, font_style::regular, graphics_unit::point, 0, false) {}
154 
156  font(const font& value);
157  font& operator=(const font& value);
158  bool operator==(const font& value) const {return data_->font_family_ == value.data_->font_family_ && data_->gdi_char_set_ == value.data_->gdi_char_set_ && data_->gdi_vertical_font_ == value.data_->gdi_vertical_font_ && data_->style_ == value.data_->style_ && data_->size_ == value.data_->size_ && data_->unit_ == value.data_->unit_;}
159  bool operator!=(const font& value) const {return !operator==(value);}
160  ~font();
162 
165  xtd::ustring to_string() const noexcept override {
166  //return ustring::format("[{}: ]", ustring::class_name(*this));
167  return ustring::format("[{}: name={}, size={}, units={}, gdi_char_set={}, gdi_vertical_font={}]", ustring::class_name(*this), data_->font_family_.name(), data_->size_, (int32_t)data_->unit_, data_->gdi_char_set_, data_->gdi_vertical_font_);
168  }
169 
171  friend std::ostream& operator<<(std::ostream& os, const xtd::drawing::font& font) noexcept {return os << font.to_string();}
173 
176  bool bold() const {return (data_->style_ & font_style::bold) == font_style::bold;}
177 
181  drawing::font_family font_family() const {return data_->font_family_;}
182 
208  uint8_t gdi_char_set() const {return data_->gdi_char_set_;}
209 
214  bool gdi_vertical_font() const {return data_->gdi_vertical_font_;}
215 
218  intptr_t handle() const {return data_->handle_;}
219 
226  int32_t height() const;
227 
231  bool is_system_font() const {return data_->is_system_font_;}
232 
235  bool italic() const {return (data_->style_ & font_style::italic) == font_style::italic;}
236 
239  const xtd::ustring& name() const {return data_->font_family_.name();}
240 
243  const xtd::ustring& original_font_name() const {return data_->original_font_name_;}
244 
247  float size() const {return data_->size_;}
248 
251  float size_in_points() const;
252 
255  bool strikeout() const {return (data_->style_ & font_style::strikeout) == font_style::strikeout;}
256 
259  font_style style() const {return data_->style_;}
260 
263  bool underline() const {return (data_->style_ & font_style::underline) == font_style::underline;}
264 
267  graphics_unit unit() const {return data_->unit_;}
268 
272  static font from_hdc(const intptr_t hdc);
273 
277  static font from_hfont(const intptr_t hfont);
278 
283  float get_height() const;
284 
290  float get_height(const graphics& graphics) const;
291 
296  float get_height(float dpi) const;
297 
301  intptr_t to_hfont() const;
302 
303  private:
304  friend class graphics;
305  friend class system_fonts;
306  friend class xtd::forms::native::font_dialog;
307  font() = default;
308  font(intptr_t hfont);
309  struct data {
310  intptr_t handle_ = 0;
311  drawing::font_family font_family_;
312  uint8_t gdi_char_set_ = 1;
313  bool gdi_vertical_font_ = false;
314  bool is_system_font_ = false;
315  xtd::ustring original_font_name_;
316  float size_ = 8.25f;
317  xtd::ustring system_font_name_;
318  font_style style_ = font_style::regular;
319  graphics_unit unit_ = graphics_unit::point;
320  };
321  std::shared_ptr<data> data_ = std::make_shared<data>();
322  };
323  }
324 }
Defines a particular format for text, including font face, size, and style attributes. This class cannot be inherited.
Definition: font.h:39
bool strikeout() const
Gets a value that indicates whether this xtd::drawing::font is strikeout.
Definition: font.h:255
graphics_unit unit() const
Gets the unit of measure for this xtd::drawing::font.
Definition: font.h:267
Defines a group of type faces having a similar basic design and certain variations in styles...
Definition: font_family.h:32
font(xtd::ustring family_name, float em_size, font_style style)
Initializes a new xtd::drawing::font using the specified size and style.
Definition: font.h:120
bool italic() const
Gets a value that indicates whether this xtd::drawing::font is italic.
Definition: font.h:235
Represents an ordered pair of integer x- and y-coordinates that defines a point in a two-dimensional ...
Definition: point.h:48
The xtd namespace contains all fundamental classes to access Hardware, Os, System, and more.
Definition: system_report.h:17
Represents text as a sequence of UTF-8 code units.
Definition: ustring.h:48
font(const drawing::font_family &font_family, float em_size, graphics_unit unit)
Initializes a new xtd::drawing::font using the specified size and unit.
Definition: font.h:141
Specifies the fonts used to display text in Windows display elements.
Definition: system_fonts.h:20
xtd::ustring to_string() const noexcept override
Converts this font_family to a human-readable string representation.
Definition: font.h:165
font(xtd::ustring family_name, float em_size, font_style style, graphics_unit unit, uint8_t gdi_char_set)
Initializes a new xtd::drawing::font using the specified size, style, unit, and character set...
Definition: font.h:87
font(const drawing::font_family &font_family, float em_size, font_style style, graphics_unit unit)
Initializes a new xtd::drawing::font using the specified size, style and unit.
Definition: font.h:113
uint8_t gdi_char_set() const
Gets a byte value that specifies the GDI character set that this xtd::drawing::font uses...
Definition: font.h:208
Contains xtd::drawing::font_family class.
Specifies that the height of the control is defined.
drawing::font_family font_family() const
Gets the xtd::drawing::font_family associated with this xtd::drawing::font.
Definition: font.h:181
font(const drawing::font_family &font_family, float em_size, font_style style)
Initializes a new xtd::drawing::font using the specified size and style.
Definition: font.h:127
bool gdi_vertical_font() const
Gets a Boolean value that indicates whether this xtd::drawing::font is derived from a GDI vertical fo...
Definition: font.h:214
font(xtd::ustring family_name, float em_size, font_style style, graphics_unit unit)
Initializes a new xtd::drawing::font using the specified size, style and unit.
Definition: font.h:105
bool underline() const
Gets a value that indicates whether this xtd::drawing::font is underline.
Definition: font.h:263
Contains xtd::ustring class.
float size() const
Gets the em-size of this xtd::drawing::font measured in the units specified by the unit property...
Definition: font.h:247
const xtd::ustring & original_font_name() const
Gets the face name of this Font.
Definition: font.h:243
Contains xtd::object class.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes...
Definition: object.h:26
Contains xtd::drawing::graphics_unit enum class.
font_style
Specifies style information applied to text. This enumeration has a flags attribute that allows a bit...
Definition: font_style.h:17
static ustring class_name()
Gets the class name of the object_t.
Definition: ustring.h:444
font(const drawing::font_family &font_family, float em_size)
Initializes a new xtd::drawing::font using the specified size.
Definition: font.h:153
font(const drawing::font_family &font_family, float em_size, font_style style, graphics_unit unit, uint8_t gdi_char_set, bool gdi_vertical_font)
Initializes a new xtd::drawing::font using the specified size, style, unit, and character set...
Definition: font.h:77
bool bold() const
Gets a value that indicates whether this xtd::drawing::font is bold.
Definition: font.h:176
static ustring format(const ustring &fmt, args_t &&... args)
Writes the text representation of the specified arguments list, to string using the specified format ...
Definition: ustring.h:689
graphics_unit
Specifies the unit of measure for the given data. This enumeration has a flags attribute that allows ...
Definition: graphics_unit.h:17
const xtd::ustring & name() const
Gets the face name of this xtd::drawing::font.
Definition: font.h:239
The xtd::forms namespace contains classes for creating Windows-based applications that take full adva...
Definition: about_box.h:13
intptr_t handle() const
Gets the window handle that the font is bound to.
Definition: font.h:218
Defines an object used to draw lines and curves. This class cannot be inherited.
Definition: graphics.h:48
font_style style() const
Gets style information for this xtd::drawing::font.
Definition: font.h:259
bool is_system_font() const
Gets a value indicating whether the font is a member of xtd::drawing::system_fonts.
Definition: font.h:231
font(xtd::ustring family_name, float em_size, graphics_unit unit)
Initializes a new xtd::drawing::font using the specified size and unit.
Definition: font.h:134
font(const drawing::font_family &font_family, float em_size, font_style style, graphics_unit unit, uint8_t gdi_char_set)
Initializes a new xtd::drawing::font using the specified size, style, unit, and character set...
Definition: font.h:97
font(xtd::ustring family_name, float em_size)
Initializes a new xtd::drawing::font using the specified size and unit.
Definition: font.h:147