|
@@ -128,6 +128,38 @@ static Ref<Texture2D> flip_icon(Ref<Texture2D> p_texture, bool p_flip_y = false,
|
|
|
return texture;
|
|
|
}
|
|
|
|
|
|
+static Ref<FontData> make_font(int p_height, int p_ascent, int p_charcount, const int *p_char_rects, int p_kerning_count, const int *p_kernings, int p_w, int p_h, const unsigned char *p_img) {
|
|
|
+ Ref<FontData> font(memnew(FontData));
|
|
|
+ font->new_bitmap(p_height, p_ascent, p_height);
|
|
|
+
|
|
|
+ Ref<Image> image = memnew(Image(p_img));
|
|
|
+ Ref<ImageTexture> tex = memnew(ImageTexture);
|
|
|
+ tex->create_from_image(image);
|
|
|
+
|
|
|
+ font->bitmap_add_texture(tex);
|
|
|
+
|
|
|
+ for (int i = 0; i < p_charcount; i++) {
|
|
|
+ const int *c = &p_char_rects[i * 8];
|
|
|
+
|
|
|
+ int chr = c[0];
|
|
|
+ Rect2 frect;
|
|
|
+ frect.position.x = c[1];
|
|
|
+ frect.position.y = c[2];
|
|
|
+ frect.size.x = c[3];
|
|
|
+ frect.size.y = c[4];
|
|
|
+ Point2 align(c[6], c[5]);
|
|
|
+ int advance = c[7];
|
|
|
+
|
|
|
+ font->bitmap_add_char(chr, 0, frect, align, advance);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < p_kerning_count; i++) {
|
|
|
+ font->bitmap_add_kerning_pair(p_kernings[i * 3 + 0], p_kernings[i * 3 + 1], p_kernings[i * 3 + 2]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return font;
|
|
|
+}
|
|
|
+
|
|
|
static Ref<StyleBox> make_empty_stylebox(float p_margin_left = -1, float p_margin_top = -1, float p_margin_right = -1, float p_margin_bottom = -1) {
|
|
|
Ref<StyleBox> style(memnew(StyleBoxEmpty));
|
|
|
|
|
@@ -987,41 +1019,11 @@ void make_default_theme(bool p_hidpi, Ref<Font> p_font) {
|
|
|
if (p_font.is_valid()) {
|
|
|
default_font = p_font;
|
|
|
} else if (p_hidpi) {
|
|
|
- TextServer::BitmapFontData data;
|
|
|
- data.height = _hidpi_font_height;
|
|
|
- data.ascent = _hidpi_font_ascent;
|
|
|
- data.charcount = _hidpi_font_charcount;
|
|
|
- data.char_rects = &_hidpi_font_charrects[0][0];
|
|
|
- data.kerning_count = _hidpi_font_kerning_pair_count;
|
|
|
- data.kernings = &_hidpi_font_kerning_pairs[0][0];
|
|
|
- data.w = _hidpi_font_img_width;
|
|
|
- data.h = _hidpi_font_img_height;
|
|
|
- data.img = _hidpi_font_img_data;
|
|
|
-
|
|
|
- Ref<FontData> font_data;
|
|
|
- font_data.instance();
|
|
|
- font_data->load_memory((const uint8_t *)&data, sizeof(data), "fnt");
|
|
|
- default_font_size = font_data->get_base_size();
|
|
|
-
|
|
|
+ Ref<FontData> font_data = make_font(_hidpi_font_height, _hidpi_font_ascent, _hidpi_font_charcount, &_hidpi_font_charrects[0][0], _hidpi_font_kerning_pair_count, &_hidpi_font_kerning_pairs[0][0], _hidpi_font_img_width, _hidpi_font_img_height, _hidpi_font_img_data);
|
|
|
default_font.instance();
|
|
|
default_font->add_data(font_data);
|
|
|
} else {
|
|
|
- TextServer::BitmapFontData data;
|
|
|
- data.height = _lodpi_font_height;
|
|
|
- data.ascent = _lodpi_font_ascent;
|
|
|
- data.charcount = _lodpi_font_charcount;
|
|
|
- data.char_rects = &_lodpi_font_charrects[0][0];
|
|
|
- data.kerning_count = _lodpi_font_kerning_pair_count;
|
|
|
- data.kernings = &_lodpi_font_kerning_pairs[0][0];
|
|
|
- data.w = _lodpi_font_img_width;
|
|
|
- data.h = _lodpi_font_img_height;
|
|
|
- data.img = _lodpi_font_img_data;
|
|
|
-
|
|
|
- Ref<FontData> font_data;
|
|
|
- font_data.instance();
|
|
|
- font_data->load_memory((const uint8_t *)&data, sizeof(data), "fnt");
|
|
|
- default_font_size = font_data->get_base_size();
|
|
|
-
|
|
|
+ Ref<FontData> font_data = make_font(_lodpi_font_height, _lodpi_font_ascent, _lodpi_font_charcount, &_lodpi_font_charrects[0][0], _lodpi_font_kerning_pair_count, &_lodpi_font_kerning_pairs[0][0], _lodpi_font_img_width, _lodpi_font_img_height, _lodpi_font_img_data);
|
|
|
default_font.instance();
|
|
|
default_font->add_data(font_data);
|
|
|
}
|