xtd - Reference Guide  0.1.1
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_;
320  };
321  std::shared_ptr<data> data_ = std::make_shared<data>();
322  };
323  }
324 }
Defines a group of type faces having a similar basic design and certain variations in styles....
Definition: font_family.h:32
Defines a particular format for text, including font face, size, and style attributes....
Definition: font.h:39
font(const font &prototype, float em_size)
IInitializes a new Font that uses the specified existing xtd::drawing::font and size.
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
int32_t height() const
Gets the line spacing of this font.
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
float get_height(const graphics &graphics) const
Returns the line spacing, in the current unit of a specified xtd::drawing::graphics,...
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
intptr_t handle() const
Gets the window handle that the font is bound to.
Definition: font.h:218
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
xtd::ustring to_string() const noexcept override
Converts this font_family to a human-readable string representation.
Definition: font.h:165
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(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
font(const font &prototype, float em_size, font_style style)
IInitializes a new Font that uses the specified existing xtd::drawing::font, size and font_style enum...
bool underline() const
Gets a value that indicates whether this xtd::drawing::font is underline.
Definition: font.h:263
float size_in_points() const
font(const drawing::font_family &font_family, float em_size)
Initializes a new xtd::drawing::font using the specified size.
Definition: font.h:153
intptr_t to_hfont() const
bool bold() const
Gets a value that indicates whether this xtd::drawing::font is bold.
Definition: font.h:176
font(const font &prototype, font_style style)
IInitializes a new Font that uses the specified existing xtd::drawing::font and font_style enumeratio...
font(xtd::ustring family_name, float em_size, font_style style, graphics_unit unit, uint8_t gdi_char_set, bool gdi_vertical_font)
IInitializes a new xtd::drawing::font using the specified size, style, unit, and character set.
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
graphics_unit unit() const
Gets the unit of measure for this xtd::drawing::font.
Definition: font.h:267
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
float get_height(float dpi) const
Returns the height, in pixels, of this Font when drawn to a device with the specified vertical resolu...
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
static font from_hdc(const intptr_t hdc)
Creates a font from the specified Windows handle to a device context.
font_style style() const
Gets style information for this xtd::drawing::font.
Definition: font.h:259
bool italic() const
Gets a value that indicates whether this xtd::drawing::font is italic.
Definition: font.h:235
bool strikeout() const
Gets a value that indicates whether this xtd::drawing::font is strikeout.
Definition: font.h:255
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(xtd::ustring family_name, float em_size)
Initializes a new xtd::drawing::font using the specified size and unit.
Definition: font.h:147
bool is_system_font() const
Gets a value indicating whether the font is a member of xtd::drawing::system_fonts.
Definition: font.h:231
drawing::font_family font_family() const
Gets the xtd::drawing::font_family associated with this xtd::drawing::font.
Definition: font.h:181
const xtd::ustring & original_font_name() const
Gets the face name of this Font.
Definition: font.h:243
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
const xtd::ustring & name() const
Gets the face name of this xtd::drawing::font.
Definition: font.h:239
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
float get_height() const
Returns the line spacing, in pixels, of this font.
static font from_hfont(const intptr_t hfont)
Creates a font from the specified Windows handle.
Defines an object used to draw lines and curves. This class cannot be inherited.
Definition: graphics.h:48
Represents an ordered pair of integer x- and y-coordinates that defines a point in a two-dimensional ...
Definition: point.h:48
Specifies the fonts used to display text in Windows display elements.
Definition: system_fonts.h:20
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition: object.h:26
Represents text as a sequence of UTF-8 code units.
Definition: ustring.h:48
static ustring class_name()
Gets the class name of the object_t.
Definition: ustring.h:444
Contains xtd::drawing::font_family class.
Contains xtd::drawing::graphics_unit enum class.
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
#define drawing_export_
Define shared library export.
Definition: drawing_export.h:13
graphics_unit
Specifies the unit of measure for the given data. This enumeration has a flags attribute that allows ...
Definition: graphics_unit.h:17
font_style
Specifies style information applied to text. This enumeration has a flags attribute that allows a bit...
Definition: font_style.h:17
@ point
Specifies a printer's point (1/72 inch) as the unit of measure.
@ underline
Underline text.
@ strikeout
Text with a line through the middle.
The xtd::forms namespace contains classes for creating Windows-based applications that take full adva...
Definition: about_box.h:13
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition: system_report.h:17
Contains xtd::object class.
Contains xtd::ustring class.