File: FontUtils.cpp

package info (click to toggle)
codelite 17.0.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 136,204 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (59 lines) | stat: -rw-r--r-- 1,638 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "FontUtils.hpp"

#include "wxStringHash.h"

namespace FontUtils
{
#ifdef __WXMSW__
const wxString DEFAULT_FACE_NAME = "Consolas";
constexpr int DEFAULT_FONT_SIZE = 14;
#elif defined(__WXMAC__)
const wxString DEFAULT_FACE_NAME = "monaco";
constexpr int DEFAULT_FONT_SIZE = 14;
#else // GTK, FreeBSD etc
const wxString DEFAULT_FACE_NAME = "Monospace";
constexpr int DEFAULT_FONT_SIZE = 14;
#endif

#ifdef __WXMSW__
const std::unordered_set<wxString> words = { "SemiBold", "Semibold", "Extended", "Semi Bold", "Semi bold" };
#endif

std::unordered_map<wxString, wxString> fixed_fonts_cache;

const wxString& GetFontInfo(const wxFont& font) { return GetFontInfo(font.GetNativeFontInfoDesc()); }

const wxString& GetFontInfo(const wxString& font_desc)
{
    // check the cache first
    if(fixed_fonts_cache.count(font_desc) != 0) {
        return fixed_fonts_cache[font_desc];
    }

    wxString desc = font_desc;
#ifdef __WXMSW__
    // on MSW, we need to manipulate the info by remiving
    // "Semi Bold" (on all its variants) from teh font's info
    for(const wxString& word : words) {
        desc.Replace(word, wxEmptyString);
    }

    // replace all double spaces with a single one
    while(desc.Replace("  ", " "))
        ;
    desc.Trim();
#endif

    // update the cache
    fixed_fonts_cache.insert({ font_desc, desc });
    // return the cached entry
    return fixed_fonts_cache[font_desc];
}

wxFont GetDefaultMonospacedFont()
{
    wxFontInfo fontInfo = wxFontInfo(DEFAULT_FONT_SIZE).Family(wxFONTFAMILY_MODERN).FaceName(DEFAULT_FACE_NAME);
    wxFont font(fontInfo);
    return font;
}
} // namespace FontUtils