source: git/src/glbitmapfont.h @ 8a7804fb

main
Last change on this file since 8a7804fb was 0b99107, checked in by Olly Betts <olly@…>, 7 weeks ago

Eliminate old FSF addresses

Update GPL/LGPL licence files and boilerplate to direct people who
didn't receive the licence text to the FSF website, as the current
versions of the FSF licence texts now do, rather than giving a postal
address.

  • Property mode set to 100644
File size: 2.2 KB
Line 
1//
2//  glbitmapfont.h
3//
4//  Draw text using glBitmap.
5//
6//  Copyright (C) 2011-2022 Olly Betts
7//
8//  This program is free software; you can redistribute it and/or modify
9//  it under the terms of the GNU General Public License as published by
10//  the Free Software Foundation; either version 2 of the License, or
11//  (at your option) any later version.
12//
13//  This program is distributed in the hope that it will be useful,
14//  but WITHOUT ANY WARRANTY; without even the implied warranty of
15//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16//  GNU General Public License for more details.
17//
18//  You should have received a copy of the GNU General Public License
19//  along with this program; if not, see
20//  <https://www.gnu.org/licenses/>.
21//
22
23#ifndef GLBITMAPFONT_H_INCLUDED
24#define GLBITMAPFONT_H_INCLUDED
25
26#include <wx/wx.h>
27
28class BitmapFont {
29    enum {
30        // The highest character point to generate an OpenGL list for.
31        //
32        // We can't generate a GL list for every Unicode character, so we
33        // generate them for the first BITMAPFONT_MAX_CHAR characters and then
34        // use glBitmap directly to draw other characters if they are needed.
35        //
36        // FIXME: We could perhaps even store strings consisting of only the
37        // first 256 points as ISO8859-1.
38        BITMAPFONT_MAX_CHAR = 256
39    };
40
41    int gllist_base = 0;
42
43    mutable const unsigned char * extra_data = nullptr;
44
45    mutable int * extra_chars = nullptr;
46
47    unsigned char char_width[BITMAPFONT_MAX_CHAR];
48
49    void init_extra_chars() const;
50
51    int glyph_width(wxChar ch) const;
52
53    void write_glyph(wxChar ch) const;
54
55    wxString font_file;
56
57    int font_size;
58
59  public:
60
61    BitmapFont() { }
62
63    ~BitmapFont();
64
65    bool load(const wxString & font_file, bool double_size);
66
67    int get_font_size() const { return font_size; }
68
69    void get_text_extent(const wxChar *s, size_t len, int *width, int *height) const {
70        if (width) {
71            int total_width = 0;
72            while (len--) {
73                int ch = *s++;
74                if (ch < BITMAPFONT_MAX_CHAR)
75                    total_width += char_width[ch];
76                else
77                    total_width += glyph_width(ch);
78            }
79            *width = total_width;
80        }
81        if (height) {
82            *height = get_font_size() + 1;
83        }
84    }
85
86    void write_string(const wxChar *s, size_t len) const;
87};
88
89#endif
Note: See TracBrowser for help on using the repository browser.