750 lines
32 KiB
C
750 lines
32 KiB
C
|
// This file is part of Blend2D project <https://blend2d.com>
|
||
|
//
|
||
|
// See blend2d.h or LICENSE.md for license and copyright information
|
||
|
// SPDX-License-Identifier: Zlib
|
||
|
|
||
|
#ifndef BLEND2D_FONTDEFS_H_INCLUDED
|
||
|
#define BLEND2D_FONTDEFS_H_INCLUDED
|
||
|
|
||
|
#include "geometry.h"
|
||
|
|
||
|
//! \addtogroup blend2d_api_text
|
||
|
//! \{
|
||
|
|
||
|
//! \name BLFont Related Constants
|
||
|
//! \{
|
||
|
|
||
|
//! Orientation.
|
||
|
BL_DEFINE_ENUM(BLOrientation) {
|
||
|
//! Horizontal orientation.
|
||
|
BL_ORIENTATION_HORIZONTAL = 0,
|
||
|
//! Vertical orientation.
|
||
|
BL_ORIENTATION_VERTICAL = 1,
|
||
|
|
||
|
//! Maximum value of `BLOrientation`.
|
||
|
BL_ORIENTATION_MAX_VALUE = 1
|
||
|
|
||
|
BL_FORCE_ENUM_UINT32(BL_ORIENTATION)
|
||
|
};
|
||
|
|
||
|
//! Type of a font or font face, see \ref BLFontFace (or \ref BLFontFaceCore).
|
||
|
BL_DEFINE_ENUM(BLFontFaceType) {
|
||
|
//! None or unknown font type.
|
||
|
BL_FONT_FACE_TYPE_NONE = 0,
|
||
|
//! TrueType/OpenType font type (.ttf/.otf files and font collections).
|
||
|
BL_FONT_FACE_TYPE_OPENTYPE = 1,
|
||
|
|
||
|
//! Maximum value of `BLFontFaceType`.
|
||
|
BL_FONT_FACE_TYPE_MAX_VALUE = 1
|
||
|
|
||
|
BL_FORCE_ENUM_UINT32(BL_FONT_FACE_TYPE)
|
||
|
};
|
||
|
|
||
|
//! Font stretch.
|
||
|
BL_DEFINE_ENUM(BLFontStretch) {
|
||
|
//! Ultra condensed stretch.
|
||
|
BL_FONT_STRETCH_ULTRA_CONDENSED = 1,
|
||
|
//! Extra condensed stretch.
|
||
|
BL_FONT_STRETCH_EXTRA_CONDENSED = 2,
|
||
|
//! Condensed stretch.
|
||
|
BL_FONT_STRETCH_CONDENSED = 3,
|
||
|
//! Semi condensed stretch.
|
||
|
BL_FONT_STRETCH_SEMI_CONDENSED = 4,
|
||
|
//! Normal stretch.
|
||
|
BL_FONT_STRETCH_NORMAL = 5,
|
||
|
//! Semi expanded stretch.
|
||
|
BL_FONT_STRETCH_SEMI_EXPANDED = 6,
|
||
|
//! Expanded stretch.
|
||
|
BL_FONT_STRETCH_EXPANDED = 7,
|
||
|
//! Extra expanded stretch.
|
||
|
BL_FONT_STRETCH_EXTRA_EXPANDED = 8,
|
||
|
//! Ultra expanded stretch.
|
||
|
BL_FONT_STRETCH_ULTRA_EXPANDED = 9,
|
||
|
|
||
|
//! Maximum value of `BLFontStretch`.
|
||
|
BL_FONT_STRETCH_MAX_VALUE = 9
|
||
|
|
||
|
BL_FORCE_ENUM_UINT32(BL_FONT_STRETCH)
|
||
|
};
|
||
|
|
||
|
//! Font style.
|
||
|
BL_DEFINE_ENUM(BLFontStyle) {
|
||
|
//! Normal style.
|
||
|
BL_FONT_STYLE_NORMAL = 0,
|
||
|
//! Oblique.
|
||
|
BL_FONT_STYLE_OBLIQUE = 1,
|
||
|
//! Italic.
|
||
|
BL_FONT_STYLE_ITALIC = 2,
|
||
|
|
||
|
//! Maximum value of `BLFontStyle`.
|
||
|
BL_FONT_STYLE_MAX_VALUE = 2
|
||
|
|
||
|
BL_FORCE_ENUM_UINT32(BL_FONT_STYLE)
|
||
|
};
|
||
|
|
||
|
//! Font weight.
|
||
|
BL_DEFINE_ENUM(BLFontWeight) {
|
||
|
//! Thin weight (100).
|
||
|
BL_FONT_WEIGHT_THIN = 100,
|
||
|
//! Extra light weight (200).
|
||
|
BL_FONT_WEIGHT_EXTRA_LIGHT = 200,
|
||
|
//! Light weight (300).
|
||
|
BL_FONT_WEIGHT_LIGHT = 300,
|
||
|
//! Semi light weight (350).
|
||
|
BL_FONT_WEIGHT_SEMI_LIGHT = 350,
|
||
|
//! Normal weight (400).
|
||
|
BL_FONT_WEIGHT_NORMAL = 400,
|
||
|
//! Medium weight (500).
|
||
|
BL_FONT_WEIGHT_MEDIUM = 500,
|
||
|
//! Semi bold weight (600).
|
||
|
BL_FONT_WEIGHT_SEMI_BOLD = 600,
|
||
|
//! Bold weight (700).
|
||
|
BL_FONT_WEIGHT_BOLD = 700,
|
||
|
//! Extra bold weight (800).
|
||
|
BL_FONT_WEIGHT_EXTRA_BOLD = 800,
|
||
|
//! Black weight (900).
|
||
|
BL_FONT_WEIGHT_BLACK = 900,
|
||
|
//! Extra black weight (950).
|
||
|
BL_FONT_WEIGHT_EXTRA_BLACK = 950
|
||
|
|
||
|
BL_FORCE_ENUM_UINT32(BL_FONT_WEIGHT)
|
||
|
};
|
||
|
|
||
|
//! Font string identifiers used by OpenType 'name' table.
|
||
|
BL_DEFINE_ENUM(BLFontStringId) {
|
||
|
//! Copyright notice.
|
||
|
BL_FONT_STRING_ID_COPYRIGHT_NOTICE = 0,
|
||
|
//! Font family name.
|
||
|
BL_FONT_STRING_ID_FAMILY_NAME = 1,
|
||
|
//! Font subfamily name.
|
||
|
BL_FONT_STRING_ID_SUBFAMILY_NAME = 2,
|
||
|
//! Unique font identifier.
|
||
|
BL_FONT_STRING_ID_UNIQUE_IDENTIFIER = 3,
|
||
|
//! Full font name that reflects all family and relevant subfamily descriptors.
|
||
|
BL_FONT_STRING_ID_FULL_NAME = 4,
|
||
|
//! Version string. Should begin with the synta `Version <number>.<number>`.
|
||
|
BL_FONT_STRING_ID_VERSION_STRING = 5,
|
||
|
//! PostScript name for the font.
|
||
|
BL_FONT_STRING_ID_POST_SCRIPT_NAME = 6,
|
||
|
//! Trademark notice/information for this font.
|
||
|
BL_FONT_STRING_ID_TRADEMARK = 7,
|
||
|
//! Manufacturer name.
|
||
|
BL_FONT_STRING_ID_MANUFACTURER_NAME = 8,
|
||
|
//! Name of the designer of the typeface.
|
||
|
BL_FONT_STRING_ID_DESIGNER_NAME = 9,
|
||
|
//! Description of the typeface.
|
||
|
BL_FONT_STRING_ID_DESCRIPTION = 10,
|
||
|
//! URL of font vendor.
|
||
|
BL_FONT_STRING_ID_VENDOR_URL = 11,
|
||
|
//! URL of typeface designer.
|
||
|
BL_FONT_STRING_ID_DESIGNER_URL = 12,
|
||
|
//! Description of how the font may be legally used.
|
||
|
BL_FONT_STRING_ID_LICENSE_DESCRIPTION = 13,
|
||
|
//! URL where additional licensing information can be found.
|
||
|
BL_FONT_STRING_ID_LICENSE_INFO_URL = 14,
|
||
|
//! Reserved.
|
||
|
BL_FONT_STRING_ID_RESERVED = 15,
|
||
|
//! Typographic family name.
|
||
|
BL_FONT_STRING_ID_TYPOGRAPHIC_FAMILY_NAME = 16,
|
||
|
//! Typographic subfamily name.
|
||
|
BL_FONT_STRING_ID_TYPOGRAPHIC_SUBFAMILY_NAME = 17,
|
||
|
//! Compatible full name (MAC only).
|
||
|
BL_FONT_STRING_ID_COMPATIBLE_FULL_NAME = 18,
|
||
|
//! Sample text - font name or any other text from the designer.
|
||
|
BL_FONT_STRING_ID_SAMPLE_TEXT = 19,
|
||
|
//! PostScript CID findfont name.
|
||
|
BL_FONT_STRING_ID_POST_SCRIPT_CID_NAME = 20,
|
||
|
//! WWS family name.
|
||
|
BL_FONT_STRING_ID_WWS_FAMILY_NAME = 21,
|
||
|
//! WWS subfamily name.
|
||
|
BL_FONT_STRING_ID_WWS_SUBFAMILY_NAME = 22,
|
||
|
//! Light background palette.
|
||
|
BL_FONT_STRING_ID_LIGHT_BACKGROUND_PALETTE = 23,
|
||
|
//! Dark background palette.
|
||
|
BL_FONT_STRING_ID_DARK_BACKGROUND_PALETTE = 24,
|
||
|
//! Variations PostScript name prefix.
|
||
|
BL_FONT_STRING_ID_VARIATIONS_POST_SCRIPT_PREFIX = 25,
|
||
|
|
||
|
//! Count of common font string ids.
|
||
|
BL_FONT_STRING_ID_COMMON_MAX_VALUE = 26,
|
||
|
//! Start of custom font string ids.
|
||
|
BL_FONT_STRING_ID_CUSTOM_START_INDEX = 255
|
||
|
|
||
|
BL_FORCE_ENUM_UINT32(BL_FONT_STRING_ID)
|
||
|
};
|
||
|
|
||
|
//! Bit positions in \ref BLFontUnicodeCoverage structure.
|
||
|
//!
|
||
|
//! Each bit represents a range (or multiple ranges) of unicode characters.
|
||
|
BL_DEFINE_ENUM(BLFontUnicodeCoverageIndex) {
|
||
|
BL_FONT_UC_INDEX_BASIC_LATIN, //!< [000000-00007F] Basic Latin.
|
||
|
BL_FONT_UC_INDEX_LATIN1_SUPPLEMENT, //!< [000080-0000FF] Latin-1 Supplement.
|
||
|
BL_FONT_UC_INDEX_LATIN_EXTENDED_A, //!< [000100-00017F] Latin Extended-A.
|
||
|
BL_FONT_UC_INDEX_LATIN_EXTENDED_B, //!< [000180-00024F] Latin Extended-B.
|
||
|
BL_FONT_UC_INDEX_IPA_EXTENSIONS, //!< [000250-0002AF] IPA Extensions.
|
||
|
//!< [001D00-001D7F] Phonetic Extensions.
|
||
|
//!< [001D80-001DBF] Phonetic Extensions Supplement.
|
||
|
BL_FONT_UC_INDEX_SPACING_MODIFIER_LETTERS, //!< [0002B0-0002FF] Spacing Modifier Letters.
|
||
|
//!< [00A700-00A71F] Modifier Tone Letters.
|
||
|
//!< [001DC0-001DFF] Combining Diacritical Marks Supplement.
|
||
|
BL_FONT_UC_INDEX_COMBINING_DIACRITICAL_MARKS, //!< [000300-00036F] Combining Diacritical Marks.
|
||
|
BL_FONT_UC_INDEX_GREEK_AND_COPTIC, //!< [000370-0003FF] Greek and Coptic.
|
||
|
BL_FONT_UC_INDEX_COPTIC, //!< [002C80-002CFF] Coptic.
|
||
|
BL_FONT_UC_INDEX_CYRILLIC, //!< [000400-0004FF] Cyrillic.
|
||
|
//!< [000500-00052F] Cyrillic Supplement.
|
||
|
//!< [002DE0-002DFF] Cyrillic Extended-A.
|
||
|
//!< [00A640-00A69F] Cyrillic Extended-B.
|
||
|
BL_FONT_UC_INDEX_ARMENIAN, //!< [000530-00058F] Armenian.
|
||
|
BL_FONT_UC_INDEX_HEBREW, //!< [000590-0005FF] Hebrew.
|
||
|
BL_FONT_UC_INDEX_VAI, //!< [00A500-00A63F] Vai.
|
||
|
BL_FONT_UC_INDEX_ARABIC, //!< [000600-0006FF] Arabic.
|
||
|
//!< [000750-00077F] Arabic Supplement.
|
||
|
BL_FONT_UC_INDEX_NKO, //!< [0007C0-0007FF] NKo.
|
||
|
BL_FONT_UC_INDEX_DEVANAGARI, //!< [000900-00097F] Devanagari.
|
||
|
BL_FONT_UC_INDEX_BENGALI, //!< [000980-0009FF] Bengali.
|
||
|
BL_FONT_UC_INDEX_GURMUKHI, //!< [000A00-000A7F] Gurmukhi.
|
||
|
BL_FONT_UC_INDEX_GUJARATI, //!< [000A80-000AFF] Gujarati.
|
||
|
BL_FONT_UC_INDEX_ORIYA, //!< [000B00-000B7F] Oriya.
|
||
|
BL_FONT_UC_INDEX_TAMIL, //!< [000B80-000BFF] Tamil.
|
||
|
BL_FONT_UC_INDEX_TELUGU, //!< [000C00-000C7F] Telugu.
|
||
|
BL_FONT_UC_INDEX_KANNADA, //!< [000C80-000CFF] Kannada.
|
||
|
BL_FONT_UC_INDEX_MALAYALAM, //!< [000D00-000D7F] Malayalam.
|
||
|
BL_FONT_UC_INDEX_THAI, //!< [000E00-000E7F] Thai.
|
||
|
BL_FONT_UC_INDEX_LAO, //!< [000E80-000EFF] Lao.
|
||
|
BL_FONT_UC_INDEX_GEORGIAN, //!< [0010A0-0010FF] Georgian.
|
||
|
//!< [002D00-002D2F] Georgian Supplement.
|
||
|
BL_FONT_UC_INDEX_BALINESE, //!< [001B00-001B7F] Balinese.
|
||
|
BL_FONT_UC_INDEX_HANGUL_JAMO, //!< [001100-0011FF] Hangul Jamo.
|
||
|
BL_FONT_UC_INDEX_LATIN_EXTENDED_ADDITIONAL, //!< [001E00-001EFF] Latin Extended Additional.
|
||
|
//!< [002C60-002C7F] Latin Extended-C.
|
||
|
//!< [00A720-00A7FF] Latin Extended-D.
|
||
|
BL_FONT_UC_INDEX_GREEK_EXTENDED, //!< [001F00-001FFF] Greek Extended.
|
||
|
BL_FONT_UC_INDEX_GENERAL_PUNCTUATION, //!< [002000-00206F] General Punctuation.
|
||
|
//!< [002E00-002E7F] Supplemental Punctuation.
|
||
|
BL_FONT_UC_INDEX_SUPERSCRIPTS_AND_SUBSCRIPTS, //!< [002070-00209F] Superscripts And Subscripts.
|
||
|
BL_FONT_UC_INDEX_CURRENCY_SYMBOLS, //!< [0020A0-0020CF] Currency Symbols.
|
||
|
BL_FONT_UC_INDEX_COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS, //!< [0020D0-0020FF] Combining Diacritical Marks For Symbols.
|
||
|
BL_FONT_UC_INDEX_LETTERLIKE_SYMBOLS, //!< [002100-00214F] Letterlike Symbols.
|
||
|
BL_FONT_UC_INDEX_NUMBER_FORMS, //!< [002150-00218F] Number Forms.
|
||
|
BL_FONT_UC_INDEX_ARROWS, //!< [002190-0021FF] Arrows.
|
||
|
//!< [0027F0-0027FF] Supplemental Arrows-A.
|
||
|
//!< [002900-00297F] Supplemental Arrows-B.
|
||
|
//!< [002B00-002BFF] Miscellaneous Symbols and Arrows.
|
||
|
BL_FONT_UC_INDEX_MATHEMATICAL_OPERATORS, //!< [002200-0022FF] Mathematical Operators.
|
||
|
//!< [002A00-002AFF] Supplemental Mathematical Operators.
|
||
|
//!< [0027C0-0027EF] Miscellaneous Mathematical Symbols-A.
|
||
|
//!< [002980-0029FF] Miscellaneous Mathematical Symbols-B.
|
||
|
BL_FONT_UC_INDEX_MISCELLANEOUS_TECHNICAL, //!< [002300-0023FF] Miscellaneous Technical.
|
||
|
BL_FONT_UC_INDEX_CONTROL_PICTURES, //!< [002400-00243F] Control Pictures.
|
||
|
BL_FONT_UC_INDEX_OPTICAL_CHARACTER_RECOGNITION, //!< [002440-00245F] Optical Character Recognition.
|
||
|
BL_FONT_UC_INDEX_ENCLOSED_ALPHANUMERICS, //!< [002460-0024FF] Enclosed Alphanumerics.
|
||
|
BL_FONT_UC_INDEX_BOX_DRAWING, //!< [002500-00257F] Box Drawing.
|
||
|
BL_FONT_UC_INDEX_BLOCK_ELEMENTS, //!< [002580-00259F] Block Elements.
|
||
|
BL_FONT_UC_INDEX_GEOMETRIC_SHAPES, //!< [0025A0-0025FF] Geometric Shapes.
|
||
|
BL_FONT_UC_INDEX_MISCELLANEOUS_SYMBOLS, //!< [002600-0026FF] Miscellaneous Symbols.
|
||
|
BL_FONT_UC_INDEX_DINGBATS, //!< [002700-0027BF] Dingbats.
|
||
|
BL_FONT_UC_INDEX_CJK_SYMBOLS_AND_PUNCTUATION, //!< [003000-00303F] CJK Symbols And Punctuation.
|
||
|
BL_FONT_UC_INDEX_HIRAGANA, //!< [003040-00309F] Hiragana.
|
||
|
BL_FONT_UC_INDEX_KATAKANA, //!< [0030A0-0030FF] Katakana.
|
||
|
//!< [0031F0-0031FF] Katakana Phonetic Extensions.
|
||
|
BL_FONT_UC_INDEX_BOPOMOFO, //!< [003100-00312F] Bopomofo.
|
||
|
//!< [0031A0-0031BF] Bopomofo Extended.
|
||
|
BL_FONT_UC_INDEX_HANGUL_COMPATIBILITY_JAMO, //!< [003130-00318F] Hangul Compatibility Jamo.
|
||
|
BL_FONT_UC_INDEX_PHAGS_PA, //!< [00A840-00A87F] Phags-pa.
|
||
|
BL_FONT_UC_INDEX_ENCLOSED_CJK_LETTERS_AND_MONTHS, //!< [003200-0032FF] Enclosed CJK Letters And Months.
|
||
|
BL_FONT_UC_INDEX_CJK_COMPATIBILITY, //!< [003300-0033FF] CJK Compatibility.
|
||
|
BL_FONT_UC_INDEX_HANGUL_SYLLABLES, //!< [00AC00-00D7AF] Hangul Syllables.
|
||
|
BL_FONT_UC_INDEX_NON_PLANE, //!< [00D800-00DFFF] Non-Plane 0 *.
|
||
|
BL_FONT_UC_INDEX_PHOENICIAN, //!< [010900-01091F] Phoenician.
|
||
|
BL_FONT_UC_INDEX_CJK_UNIFIED_IDEOGRAPHS, //!< [004E00-009FFF] CJK Unified Ideographs.
|
||
|
//!< [002E80-002EFF] CJK Radicals Supplement.
|
||
|
//!< [002F00-002FDF] Kangxi Radicals.
|
||
|
//!< [002FF0-002FFF] Ideographic Description Characters.
|
||
|
//!< [003400-004DBF] CJK Unified Ideographs Extension A.
|
||
|
//!< [020000-02A6DF] CJK Unified Ideographs Extension B.
|
||
|
//!< [003190-00319F] Kanbun.
|
||
|
BL_FONT_UC_INDEX_PRIVATE_USE_PLANE0, //!< [00E000-00F8FF] Private Use (Plane 0).
|
||
|
BL_FONT_UC_INDEX_CJK_STROKES, //!< [0031C0-0031EF] CJK Strokes.
|
||
|
//!< [00F900-00FAFF] CJK Compatibility Ideographs.
|
||
|
//!< [02F800-02FA1F] CJK Compatibility Ideographs Supplement.
|
||
|
BL_FONT_UC_INDEX_ALPHABETIC_PRESENTATION_FORMS, //!< [00FB00-00FB4F] Alphabetic Presentation Forms.
|
||
|
BL_FONT_UC_INDEX_ARABIC_PRESENTATION_FORMS_A, //!< [00FB50-00FDFF] Arabic Presentation Forms-A.
|
||
|
BL_FONT_UC_INDEX_COMBINING_HALF_MARKS, //!< [00FE20-00FE2F] Combining Half Marks.
|
||
|
BL_FONT_UC_INDEX_VERTICAL_FORMS, //!< [00FE10-00FE1F] Vertical Forms.
|
||
|
//!< [00FE30-00FE4F] CJK Compatibility Forms.
|
||
|
BL_FONT_UC_INDEX_SMALL_FORM_VARIANTS, //!< [00FE50-00FE6F] Small Form Variants.
|
||
|
BL_FONT_UC_INDEX_ARABIC_PRESENTATION_FORMS_B, //!< [00FE70-00FEFF] Arabic Presentation Forms-B.
|
||
|
BL_FONT_UC_INDEX_HALFWIDTH_AND_FULLWIDTH_FORMS, //!< [00FF00-00FFEF] Halfwidth And Fullwidth Forms.
|
||
|
BL_FONT_UC_INDEX_SPECIALS, //!< [00FFF0-00FFFF] Specials.
|
||
|
BL_FONT_UC_INDEX_TIBETAN, //!< [000F00-000FFF] Tibetan.
|
||
|
BL_FONT_UC_INDEX_SYRIAC, //!< [000700-00074F] Syriac.
|
||
|
BL_FONT_UC_INDEX_THAANA, //!< [000780-0007BF] Thaana.
|
||
|
BL_FONT_UC_INDEX_SINHALA, //!< [000D80-000DFF] Sinhala.
|
||
|
BL_FONT_UC_INDEX_MYANMAR, //!< [001000-00109F] Myanmar.
|
||
|
BL_FONT_UC_INDEX_ETHIOPIC, //!< [001200-00137F] Ethiopic.
|
||
|
//!< [001380-00139F] Ethiopic Supplement.
|
||
|
//!< [002D80-002DDF] Ethiopic Extended.
|
||
|
BL_FONT_UC_INDEX_CHEROKEE, //!< [0013A0-0013FF] Cherokee.
|
||
|
BL_FONT_UC_INDEX_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS, //!< [001400-00167F] Unified Canadian Aboriginal Syllabics.
|
||
|
BL_FONT_UC_INDEX_OGHAM, //!< [001680-00169F] Ogham.
|
||
|
BL_FONT_UC_INDEX_RUNIC, //!< [0016A0-0016FF] Runic.
|
||
|
BL_FONT_UC_INDEX_KHMER, //!< [001780-0017FF] Khmer.
|
||
|
//!< [0019E0-0019FF] Khmer Symbols.
|
||
|
BL_FONT_UC_INDEX_MONGOLIAN, //!< [001800-0018AF] Mongolian.
|
||
|
BL_FONT_UC_INDEX_BRAILLE_PATTERNS, //!< [002800-0028FF] Braille Patterns.
|
||
|
BL_FONT_UC_INDEX_YI_SYLLABLES_AND_RADICALS, //!< [00A000-00A48F] Yi Syllables.
|
||
|
//!< [00A490-00A4CF] Yi Radicals.
|
||
|
BL_FONT_UC_INDEX_TAGALOG_HANUNOO_BUHID_TAGBANWA, //!< [001700-00171F] Tagalog.
|
||
|
//!< [001720-00173F] Hanunoo.
|
||
|
//!< [001740-00175F] Buhid.
|
||
|
//!< [001760-00177F] Tagbanwa.
|
||
|
BL_FONT_UC_INDEX_OLD_ITALIC, //!< [010300-01032F] Old Italic.
|
||
|
BL_FONT_UC_INDEX_GOTHIC, //!< [010330-01034F] Gothic.
|
||
|
BL_FONT_UC_INDEX_DESERET, //!< [010400-01044F] Deseret.
|
||
|
BL_FONT_UC_INDEX_MUSICAL_SYMBOLS, //!< [01D000-01D0FF] Byzantine Musical Symbols.
|
||
|
//!< [01D100-01D1FF] Musical Symbols.
|
||
|
//!< [01D200-01D24F] Ancient Greek Musical Notation.
|
||
|
BL_FONT_UC_INDEX_MATHEMATICAL_ALPHANUMERIC_SYMBOLS, //!< [01D400-01D7FF] Mathematical Alphanumeric Symbols.
|
||
|
BL_FONT_UC_INDEX_PRIVATE_USE_PLANE_15_16, //!< [0F0000-0FFFFD] Private Use (Plane 15).
|
||
|
//!< [100000-10FFFD] Private Use (Plane 16).
|
||
|
BL_FONT_UC_INDEX_VARIATION_SELECTORS, //!< [00FE00-00FE0F] Variation Selectors.
|
||
|
//!< [0E0100-0E01EF] Variation Selectors Supplement.
|
||
|
BL_FONT_UC_INDEX_TAGS, //!< [0E0000-0E007F] Tags.
|
||
|
BL_FONT_UC_INDEX_LIMBU, //!< [001900-00194F] Limbu.
|
||
|
BL_FONT_UC_INDEX_TAI_LE, //!< [001950-00197F] Tai Le.
|
||
|
BL_FONT_UC_INDEX_NEW_TAI_LUE, //!< [001980-0019DF] New Tai Lue.
|
||
|
BL_FONT_UC_INDEX_BUGINESE, //!< [001A00-001A1F] Buginese.
|
||
|
BL_FONT_UC_INDEX_GLAGOLITIC, //!< [002C00-002C5F] Glagolitic.
|
||
|
BL_FONT_UC_INDEX_TIFINAGH, //!< [002D30-002D7F] Tifinagh.
|
||
|
BL_FONT_UC_INDEX_YIJING_HEXAGRAM_SYMBOLS, //!< [004DC0-004DFF] Yijing Hexagram Symbols.
|
||
|
BL_FONT_UC_INDEX_SYLOTI_NAGRI, //!< [00A800-00A82F] Syloti Nagri.
|
||
|
BL_FONT_UC_INDEX_LINEAR_B_SYLLABARY_AND_IDEOGRAMS, //!< [010000-01007F] Linear B Syllabary.
|
||
|
//!< [010080-0100FF] Linear B Ideograms.
|
||
|
//!< [010100-01013F] Aegean Numbers.
|
||
|
BL_FONT_UC_INDEX_ANCIENT_GREEK_NUMBERS, //!< [010140-01018F] Ancient Greek Numbers.
|
||
|
BL_FONT_UC_INDEX_UGARITIC, //!< [010380-01039F] Ugaritic.
|
||
|
BL_FONT_UC_INDEX_OLD_PERSIAN, //!< [0103A0-0103DF] Old Persian.
|
||
|
BL_FONT_UC_INDEX_SHAVIAN, //!< [010450-01047F] Shavian.
|
||
|
BL_FONT_UC_INDEX_OSMANYA, //!< [010480-0104AF] Osmanya.
|
||
|
BL_FONT_UC_INDEX_CYPRIOT_SYLLABARY, //!< [010800-01083F] Cypriot Syllabary.
|
||
|
BL_FONT_UC_INDEX_KHAROSHTHI, //!< [010A00-010A5F] Kharoshthi.
|
||
|
BL_FONT_UC_INDEX_TAI_XUAN_JING_SYMBOLS, //!< [01D300-01D35F] Tai Xuan Jing Symbols.
|
||
|
BL_FONT_UC_INDEX_CUNEIFORM, //!< [012000-0123FF] Cuneiform.
|
||
|
//!< [012400-01247F] Cuneiform Numbers and Punctuation.
|
||
|
BL_FONT_UC_INDEX_COUNTING_ROD_NUMERALS, //!< [01D360-01D37F] Counting Rod Numerals.
|
||
|
BL_FONT_UC_INDEX_SUNDANESE, //!< [001B80-001BBF] Sundanese.
|
||
|
BL_FONT_UC_INDEX_LEPCHA, //!< [001C00-001C4F] Lepcha.
|
||
|
BL_FONT_UC_INDEX_OL_CHIKI, //!< [001C50-001C7F] Ol Chiki.
|
||
|
BL_FONT_UC_INDEX_SAURASHTRA, //!< [00A880-00A8DF] Saurashtra.
|
||
|
BL_FONT_UC_INDEX_KAYAH_LI, //!< [00A900-00A92F] Kayah Li.
|
||
|
BL_FONT_UC_INDEX_REJANG, //!< [00A930-00A95F] Rejang.
|
||
|
BL_FONT_UC_INDEX_CHAM, //!< [00AA00-00AA5F] Cham.
|
||
|
BL_FONT_UC_INDEX_ANCIENT_SYMBOLS, //!< [010190-0101CF] Ancient Symbols.
|
||
|
BL_FONT_UC_INDEX_PHAISTOS_DISC, //!< [0101D0-0101FF] Phaistos Disc.
|
||
|
BL_FONT_UC_INDEX_CARIAN_LYCIAN_LYDIAN, //!< [0102A0-0102DF] Carian.
|
||
|
//!< [010280-01029F] Lycian.
|
||
|
//!< [010920-01093F] Lydian.
|
||
|
BL_FONT_UC_INDEX_DOMINO_AND_MAHJONG_TILES, //!< [01F030-01F09F] Domino Tiles.
|
||
|
//!< [01F000-01F02F] Mahjong Tiles.
|
||
|
BL_FONT_UC_INDEX_INTERNAL_USAGE_123, //!< Reserved for internal usage (123).
|
||
|
BL_FONT_UC_INDEX_INTERNAL_USAGE_124, //!< Reserved for internal usage (124).
|
||
|
BL_FONT_UC_INDEX_INTERNAL_USAGE_125, //!< Reserved for internal usage (125).
|
||
|
BL_FONT_UC_INDEX_INTERNAL_USAGE_126, //!< Reserved for internal usage (126).
|
||
|
BL_FONT_UC_INDEX_INTERNAL_USAGE_127, //!< Reserved for internal usage (127).
|
||
|
|
||
|
//! Maximum value of `BLFontUnicodeCoverageIndex`.
|
||
|
BL_FONT_UC_INDEX_MAX_VALUE
|
||
|
|
||
|
BL_FORCE_ENUM_UINT32(BL_FONT_UC_INDEX)
|
||
|
};
|
||
|
|
||
|
//! Text direction.
|
||
|
BL_DEFINE_ENUM(BLTextDirection) {
|
||
|
//! Left-to-right direction.
|
||
|
BL_TEXT_DIRECTION_LTR = 0,
|
||
|
//! Right-to-left direction.
|
||
|
BL_TEXT_DIRECTION_RTL = 1,
|
||
|
|
||
|
//! Maximum value of `BLTextDirection`.
|
||
|
BL_TEXT_DIRECTION_MAX_VALUE = 1
|
||
|
|
||
|
BL_FORCE_ENUM_UINT32(BL_TEXT_DIRECTION)
|
||
|
};
|
||
|
|
||
|
//! \}
|
||
|
|
||
|
//! \name BLFont Related Types
|
||
|
//! \{
|
||
|
|
||
|
//! Glyph id - a 32-bit unsigned integer.
|
||
|
typedef uint32_t BLGlyphId;
|
||
|
|
||
|
//! \}
|
||
|
|
||
|
//! \name BLFont Related Structs
|
||
|
//! \{
|
||
|
|
||
|
//! Contains additional information associated with a glyph used by `BLGlyphBuffer`.
|
||
|
struct BLGlyphInfo {
|
||
|
//! \name Members
|
||
|
//! \{
|
||
|
|
||
|
uint32_t cluster;
|
||
|
uint32_t reserved;
|
||
|
|
||
|
//! \}
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
//! \name Common Functionality
|
||
|
//! \{
|
||
|
|
||
|
BL_INLINE_NODEBUG void reset() noexcept { *this = BLGlyphInfo{}; }
|
||
|
|
||
|
//! \}
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
//! Glyph placement.
|
||
|
//!
|
||
|
//! Provides information about glyph offset (x/y) and advance (x/y).
|
||
|
struct BLGlyphPlacement {
|
||
|
//! \name Members
|
||
|
//! \{
|
||
|
|
||
|
BLPointI placement;
|
||
|
BLPointI advance;
|
||
|
|
||
|
//! \}
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
//! \name Common Functionality
|
||
|
//! \{
|
||
|
|
||
|
BL_INLINE_NODEBUG void reset() noexcept { *this = BLGlyphPlacement{}; }
|
||
|
|
||
|
//! \}
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
//! Character to glyph mapping state.
|
||
|
struct BLGlyphMappingState {
|
||
|
//! \name Members
|
||
|
//! \{
|
||
|
|
||
|
//! Number of glyphs or glyph-items on output.
|
||
|
size_t glyphCount;
|
||
|
//! Index of the first undefined glyph (SIZE_MAX if none).
|
||
|
size_t undefinedFirst;
|
||
|
//! Undefined glyph count (chars that have no mapping).
|
||
|
size_t undefinedCount;
|
||
|
|
||
|
//! \}
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
//! \name Common Functionality
|
||
|
//! \{
|
||
|
|
||
|
BL_INLINE_NODEBUG void reset() noexcept { *this = BLGlyphMappingState{}; }
|
||
|
|
||
|
//! \}
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
//! Information passed to a `BLPathSinkFunc` sink by `BLFont::getGlyphOutlines()`.
|
||
|
struct BLGlyphOutlineSinkInfo {
|
||
|
size_t glyphIndex;
|
||
|
size_t contourCount;
|
||
|
};
|
||
|
|
||
|
//! Font unicode coverage.
|
||
|
//!
|
||
|
//! Unicode coverage describes which unicode characters are provided by a font. Blend2D accesses this information by
|
||
|
//! reading "OS/2" table, if available.
|
||
|
struct BLFontUnicodeCoverage {
|
||
|
uint32_t data[4];
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
BL_INLINE_NODEBUG void reset() noexcept { *this = BLFontUnicodeCoverage{}; }
|
||
|
|
||
|
BL_INLINE_NODEBUG bool empty() const noexcept {
|
||
|
return (data[0] | data[1] | data[2] | data[3]) == 0;
|
||
|
}
|
||
|
|
||
|
BL_INLINE_NODEBUG bool hasBit(uint32_t index) const noexcept {
|
||
|
return ((data[index / 32] >> (index % 32)) & 0x1) != 0;
|
||
|
}
|
||
|
|
||
|
BL_INLINE_NODEBUG void setBit(uint32_t index) noexcept {
|
||
|
data[index / 32] |= uint32_t(1) << (index % 32);
|
||
|
}
|
||
|
|
||
|
BL_INLINE_NODEBUG void clearBit(uint32_t index) noexcept {
|
||
|
data[index / 32] &= ~(uint32_t(1) << (index % 32));
|
||
|
}
|
||
|
|
||
|
BL_INLINE_NODEBUG bool equals(const BLFontUnicodeCoverage& other) const noexcept {
|
||
|
return bool(unsigned(blEquals(data[0], other.data[0])) &
|
||
|
unsigned(blEquals(data[1], other.data[1])) &
|
||
|
unsigned(blEquals(data[2], other.data[2])) &
|
||
|
unsigned(blEquals(data[3], other.data[3])));
|
||
|
}
|
||
|
|
||
|
BL_INLINE_NODEBUG bool operator==(const BLFontUnicodeCoverage& other) const noexcept { return equals(other); }
|
||
|
BL_INLINE_NODEBUG bool operator!=(const BLFontUnicodeCoverage& other) const noexcept { return !equals(other); }
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
//! Font PANOSE classification.
|
||
|
struct BLFontPanose {
|
||
|
union {
|
||
|
uint8_t data[10];
|
||
|
uint8_t familyKind;
|
||
|
|
||
|
struct {
|
||
|
uint8_t familyKind;
|
||
|
uint8_t serifStyle;
|
||
|
uint8_t weight;
|
||
|
uint8_t proportion;
|
||
|
uint8_t contrast;
|
||
|
uint8_t strokeVariation;
|
||
|
uint8_t armStyle;
|
||
|
uint8_t letterform;
|
||
|
uint8_t midline;
|
||
|
uint8_t xHeight;
|
||
|
} text;
|
||
|
|
||
|
struct {
|
||
|
uint8_t familyKind;
|
||
|
uint8_t toolKind;
|
||
|
uint8_t weight;
|
||
|
uint8_t spacing;
|
||
|
uint8_t aspectRatio;
|
||
|
uint8_t contrast;
|
||
|
uint8_t topology;
|
||
|
uint8_t form;
|
||
|
uint8_t finials;
|
||
|
uint8_t xAscent;
|
||
|
} script;
|
||
|
|
||
|
struct {
|
||
|
uint8_t familyKind;
|
||
|
uint8_t decorativeClass;
|
||
|
uint8_t weight;
|
||
|
uint8_t aspect;
|
||
|
uint8_t contrast;
|
||
|
uint8_t serifVariant;
|
||
|
uint8_t treatment;
|
||
|
uint8_t lining;
|
||
|
uint8_t topology;
|
||
|
uint8_t characterRange;
|
||
|
} decorative;
|
||
|
|
||
|
struct {
|
||
|
uint8_t familyKind;
|
||
|
uint8_t symbolKind;
|
||
|
uint8_t weight;
|
||
|
uint8_t spacing;
|
||
|
uint8_t aspectRatioAndContrast;
|
||
|
uint8_t aspectRatio94;
|
||
|
uint8_t aspectRatio119;
|
||
|
uint8_t aspectRatio157;
|
||
|
uint8_t aspectRatio163;
|
||
|
uint8_t aspectRatio211;
|
||
|
} symbol;
|
||
|
};
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
BL_INLINE_NODEBUG void reset() noexcept { *this = BLFontPanose{}; }
|
||
|
|
||
|
BL_INLINE_NODEBUG bool empty() const noexcept {
|
||
|
return (data[0] | data[1] | data[2] | data[3] | data[4] |
|
||
|
data[5] | data[6] | data[7] | data[8] | data[9] ) == 0;
|
||
|
}
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
//! 2x2 transformation matrix used by `BLFont`. It's similar to `BLMatrix2D`, however, it doesn't provide a
|
||
|
//! translation part as it's assumed to be zero.
|
||
|
struct BLFontMatrix {
|
||
|
union {
|
||
|
double m[4];
|
||
|
struct {
|
||
|
double m00;
|
||
|
double m01;
|
||
|
double m10;
|
||
|
double m11;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
BL_INLINE_NODEBUG BLFontMatrix() noexcept = default;
|
||
|
BL_INLINE_NODEBUG BLFontMatrix(const BLFontMatrix& other) noexcept = default;
|
||
|
|
||
|
BL_INLINE_NODEBUG BLFontMatrix(double m00, double m01, double m10, double m11) noexcept
|
||
|
: m00(m00), m01(m01), m10(m10), m11(m11) {}
|
||
|
|
||
|
BL_INLINE_NODEBUG BLFontMatrix& operator=(const BLFontMatrix& other) noexcept = default;
|
||
|
|
||
|
BL_INLINE_NODEBUG void reset() noexcept {
|
||
|
m00 = 1.0;
|
||
|
m01 = 0.0;
|
||
|
m10 = 0.0;
|
||
|
m11 = 1.0;
|
||
|
}
|
||
|
|
||
|
BL_INLINE_NODEBUG void reset(double m00Value, double m01Value, double m10Value, double m11Value) noexcept {
|
||
|
m00 = m00Value;
|
||
|
m01 = m01Value;
|
||
|
m10 = m10Value;
|
||
|
m11 = m11Value;
|
||
|
}
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
//! Scaled `BLFontDesignMetrics` based on font size and other properties.
|
||
|
struct BLFontMetrics {
|
||
|
//! Font size.
|
||
|
float size;
|
||
|
|
||
|
union {
|
||
|
struct {
|
||
|
//! Font ascent (horizontal orientation).
|
||
|
float ascent;
|
||
|
//! Font ascent (vertical orientation).
|
||
|
float vAscent;
|
||
|
//! Font descent (horizontal orientation).
|
||
|
float descent;
|
||
|
//! Font descent (vertical orientation).
|
||
|
float vDescent;
|
||
|
};
|
||
|
|
||
|
struct {
|
||
|
float ascentByOrientation[2];
|
||
|
float descentByOrientation[2];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
//! Line gap.
|
||
|
float lineGap;
|
||
|
//! Distance between the baseline and the mean line of lower-case letters.
|
||
|
float xHeight;
|
||
|
//! Maximum height of a capital letter above the baseline.
|
||
|
float capHeight;
|
||
|
|
||
|
//! Minimum x, reported by the font.
|
||
|
float xMin;
|
||
|
//! Minimum y, reported by the font.
|
||
|
float yMin;
|
||
|
//! Maximum x, reported by the font.
|
||
|
float xMax;
|
||
|
//! Maximum y, reported by the font.
|
||
|
float yMax;
|
||
|
|
||
|
//! Text underline position.
|
||
|
float underlinePosition;
|
||
|
//! Text underline thickness.
|
||
|
float underlineThickness;
|
||
|
//! Text strikethrough position.
|
||
|
float strikethroughPosition;
|
||
|
//! Text strikethrough thickness.
|
||
|
float strikethroughThickness;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
BL_INLINE_NODEBUG void reset() noexcept { *this = BLFontMetrics{}; }
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
//! Design metrics of a font.
|
||
|
//!
|
||
|
//! Design metrics is information that `BLFontFace` collected directly from the font data. It means that all
|
||
|
//! fields are measured in font design units.
|
||
|
//!
|
||
|
//! When a new `BLFont` instance is created a scaled metrics `BLFontMetrics` is automatically calculated from
|
||
|
//! `BLFontDesignMetrics` including other members like transformation, etc...
|
||
|
struct BLFontDesignMetrics {
|
||
|
//! Units per EM square.
|
||
|
int unitsPerEm;
|
||
|
//! Lowest readable size in pixels.
|
||
|
int lowestPPEM;
|
||
|
//! Line gap.
|
||
|
int lineGap;
|
||
|
//! Distance between the baseline and the mean line of lower-case letters.
|
||
|
int xHeight;
|
||
|
//! Maximum height of a capital letter above the baseline.
|
||
|
int capHeight;
|
||
|
|
||
|
union {
|
||
|
struct {
|
||
|
//! Ascent (horizontal layout).
|
||
|
int ascent;
|
||
|
//! Ascent (vertical layout).
|
||
|
int vAscent;
|
||
|
//! Descent (horizontal layout).
|
||
|
int descent;
|
||
|
//! Descent (vertical layout).
|
||
|
int vDescent;
|
||
|
//! Minimum leading-side bearing (horizontal layout).
|
||
|
int hMinLSB;
|
||
|
//! Minimum leading-side bearing (vertical layout).
|
||
|
int vMinLSB;
|
||
|
//! Minimum trailing-side bearing (horizontal layout).
|
||
|
int hMinTSB;
|
||
|
//! Minimum trailing-side bearing (vertical layout).
|
||
|
int vMinTSB;
|
||
|
//! Maximum advance (horizontal layout).
|
||
|
int hMaxAdvance;
|
||
|
//! Maximum advance (vertical layout).
|
||
|
int vMaxAdvance;
|
||
|
};
|
||
|
|
||
|
struct {
|
||
|
//! Horizontal & vertical ascents.
|
||
|
int ascentByOrientation[2];
|
||
|
//! Horizontal & vertical descents.
|
||
|
int descentByOrientation[2];
|
||
|
//! Minimum leading-side bearing (horizontal and vertical).
|
||
|
int minLSBByOrientation[2];
|
||
|
//! Minimum trailing-side bearing (horizontal and vertical)..
|
||
|
int minTSBByOrientation[2];
|
||
|
//! Maximum advance width (horizontal) and height (vertical).
|
||
|
int maxAdvanceByOrientation[2];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
//! Aggregated bounding box of all glyphs in the font.
|
||
|
//!
|
||
|
//! \note This value is reported by the font data so it's not granted to be true.
|
||
|
BLBoxI glyphBoundingBox;
|
||
|
|
||
|
//! Text underline position.
|
||
|
int underlinePosition;
|
||
|
//! Text underline thickness.
|
||
|
int underlineThickness;
|
||
|
//! Text strikethrough position.
|
||
|
int strikethroughPosition;
|
||
|
//! Text strikethrough thickness.
|
||
|
int strikethroughThickness;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
BL_INLINE_NODEBUG void reset() noexcept { *this = BLFontDesignMetrics{}; }
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
//! Text metrics.
|
||
|
struct BLTextMetrics {
|
||
|
BLPoint advance;
|
||
|
BLPoint leadingBearing;
|
||
|
BLPoint trailingBearing;
|
||
|
BLBox boundingBox;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
BL_INLINE_NODEBUG void reset() noexcept { *this = BLTextMetrics{}; }
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
//! \}
|
||
|
|
||
|
//! \}
|
||
|
|
||
|
#endif // BLEND2D_FONTDEFS_H_INCLUDED
|