Skip to content

Commit

Permalink
Add a custom font for mouse buttons icons
Browse files Browse the repository at this point in the history
I would like to use it for the help bar on top.
  • Loading branch information
guillaumechereau committed Jul 17, 2024
1 parent f1d2c73 commit e6e6497
Show file tree
Hide file tree
Showing 7 changed files with 331 additions and 9 deletions.
Binary file added data/fonts/goxel-font.ttf
Binary file not shown.
75 changes: 75 additions & 0 deletions src/assets/fonts.inl
Original file line number Diff line number Diff line change
Expand Up @@ -31928,6 +31928,81 @@
43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,29,
}
},
{.path = "data/fonts/goxel-font.ttf", .size = 1896, .data =
(const uint8_t[]){
0,1,0,0,0,13,0,128,0,3,0,80,70,70,84,77,167,168,226,128,0,0,7,76,0,0,0,
28,79,83,47,50,60,122,88,21,0,0,1,88,0,0,0,96,99,109,97,112,233,131,231,
18,0,0,1,204,0,0,1,72,99,118,116,32,0,33,2,121,0,0,3,20,0,0,0,4,103,97,
115,112,255,255,0,3,0,0,7,68,0,0,0,8,103,108,121,102,175,248,123,39,0,
0,3,40,0,0,1,172,104,101,97,100,39,127,99,53,0,0,0,220,0,0,0,54,104,104,
101,97,6,72,3,128,0,0,1,20,0,0,0,36,104,109,116,120,11,227,0,119,0,0,1,
184,0,0,0,20,108,111,99,97,1,98,0,240,0,0,3,24,0,0,0,14,109,97,120,112,
0,75,0,85,0,0,1,56,0,0,0,32,110,97,109,101,99,250,88,194,0,0,4,212,0,0,
1,254,112,111,115,116,53,0,25,30,0,0,6,212,0,0,0,109,0,1,0,0,0,1,0,0,240,
84,75,213,95,15,60,245,0,11,3,232,0,0,0,0,226,189,15,203,0,0,0,0,226,189,
15,203,0,33,255,147,2,197,3,39,0,0,0,8,0,2,0,0,0,0,0,0,0,1,0,0,3,39,255,
147,0,90,3,232,0,0,0,0,2,197,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,1,0,
0,0,6,0,36,0,3,0,0,0,0,0,2,0,0,0,1,0,1,0,0,0,64,0,46,0,0,0,0,0,4,3,232,
1,144,0,5,0,0,2,138,2,188,0,0,0,140,2,138,2,188,0,0,1,224,0,49,1,2,0,0,
2,0,5,9,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,80,102,69,100,0,128,
230,96,230,98,3,82,255,106,0,90,3,39,0,109,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
0,32,0,1,3,232,0,33,0,0,0,0,3,232,0,0,3,232,0,43,0,43,0,43,0,0,0,3,0,0,
0,3,0,0,0,28,0,1,0,0,0,0,0,66,0,3,0,1,0,0,0,28,0,4,0,38,0,0,0,4,0,4,0,
1,0,0,230,98,255,255,0,0,230,96,255,255,0,0,0,1,0,4,0,0,0,3,0,4,0,5,0,
0,1,6,0,0,1,0,0,0,0,0,0,0,1,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,2,121,0,0,0,42,0,42,0,42,0,98,0,156,
0,214,0,0,0,2,0,33,0,0,1,42,2,154,0,3,0,7,0,46,177,1,0,47,60,178,7,4,0,
237,50,177,6,5,220,60,178,3,2,0,237,50,0,177,3,0,47,60,178,5,4,0,237,50,
178,7,6,1,252,60,178,1,2,0,237,50,51,17,33,17,39,51,17,35,33,1,9,232,199,
199,2,154,253,102,33,2,88,0,0,3,0,43,255,147,2,197,3,39,0,3,0,19,0,35,
0,0,55,17,51,17,3,33,50,22,21,17,20,6,35,33,34,38,53,17,52,54,55,34,6,
21,17,20,22,51,33,50,54,53,17,52,38,35,146,146,125,1,163,18,26,26,18,254,
93,19,25,25,19,51,72,72,51,1,163,50,72,72,50,225,1,223,254,33,1,246,25,
19,253,99,18,26,26,18,2,157,19,25,79,72,51,253,99,51,71,71,51,2,157,51,
72,0,0,3,0,43,255,147,2,197,3,39,0,3,0,19,0,35,0,0,37,17,51,17,1,33,50,
22,21,17,20,6,35,33,34,38,53,17,52,54,55,34,6,21,17,20,22,51,33,50,54,
53,17,52,38,35,1,36,166,254,221,1,163,18,26,26,18,254,93,19,25,25,19,51,
72,72,51,1,163,50,72,72,50,225,1,223,254,33,1,246,25,19,253,99,18,26,26,
18,2,157,19,25,79,72,51,253,99,51,71,71,51,2,157,51,72,0,0,0,0,3,0,43,
255,147,2,197,3,39,0,3,0,19,0,35,0,0,37,17,51,17,1,33,50,22,21,17,20,6,
35,33,34,38,53,17,52,54,55,34,6,21,17,20,22,51,33,50,54,53,17,52,38,35,
1,202,146,254,75,1,163,18,26,26,18,254,93,19,25,25,19,51,72,72,51,1,163,
50,72,72,50,225,1,223,254,33,1,246,25,19,253,99,18,26,26,18,2,157,19,25,
79,72,51,253,99,51,71,71,51,2,157,51,72,0,0,0,0,0,0,14,0,174,0,1,0,0,0,
0,0,0,0,37,0,76,0,1,0,0,0,0,0,1,0,5,0,126,0,1,0,0,0,0,0,2,0,7,0,148,0,
1,0,0,0,0,0,3,0,33,0,224,0,1,0,0,0,0,0,4,0,5,1,14,0,1,0,0,0,0,0,5,0,13,
1,48,0,1,0,0,0,0,0,6,0,5,1,74,0,3,0,1,4,9,0,0,0,74,0,0,0,3,0,1,4,9,0,1,
0,10,0,114,0,3,0,1,4,9,0,2,0,14,0,132,0,3,0,1,4,9,0,3,0,66,0,156,0,3,0,
1,4,9,0,4,0,10,1,2,0,3,0,1,4,9,0,5,0,26,1,20,0,3,0,1,4,9,0,6,0,10,1,62,
0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,40,0,99,0,
41,0,32,0,50,0,48,0,50,0,52,0,44,0,32,0,71,0,117,0,105,0,108,0,108,0,97,
0,117,0,109,0,101,0,32,0,67,0,104,0,101,0,114,0,101,0,97,0,117,0,0,67,
111,112,121,114,105,103,104,116,32,40,99,41,32,50,48,50,52,44,32,71,117,
105,108,108,97,117,109,101,32,67,104,101,114,101,97,117,0,0,71,0,111,0,
120,0,101,0,108,0,0,71,111,120,101,108,0,0,82,0,101,0,103,0,117,0,108,
0,97,0,114,0,0,82,101,103,117,108,97,114,0,0,70,0,111,0,110,0,116,0,70,
0,111,0,114,0,103,0,101,0,32,0,50,0,46,0,48,0,32,0,58,0,32,0,71,0,111,
0,120,0,101,0,108,0,32,0,58,0,32,0,49,0,55,0,45,0,55,0,45,0,50,0,48,0,
50,0,52,0,0,70,111,110,116,70,111,114,103,101,32,50,46,48,32,58,32,71,
111,120,101,108,32,58,32,49,55,45,55,45,50,48,50,52,0,0,71,0,111,0,120,
0,101,0,108,0,0,71,111,120,101,108,0,0,86,0,101,0,114,0,115,0,105,0,111,
0,110,0,32,0,49,0,46,0,48,0,46,0,48,0,0,86,101,114,115,105,111,110,32,
49,46,48,46,48,0,0,71,0,111,0,120,0,101,0,108,0,0,71,111,120,101,108,0,
0,0,0,2,0,0,0,0,0,0,255,181,0,50,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,6,0,0,0,1,0,2,1,2,1,3,1,4,20,115,118,103,47,103,108,121,112,104,115,
47,109,111,117,115,101,95,108,109,98,20,115,118,103,47,103,108,121,112,
104,115,47,109,111,117,115,101,95,109,109,98,20,115,118,103,47,103,108,
121,112,104,115,47,109,111,117,115,101,95,114,109,98,0,0,0,0,0,0,1,255,
255,0,2,0,0,0,1,0,0,0,0,226,46,194,233,0,0,0,0,226,189,15,203,0,0,0,0,
226,189,15,203,
}
},



31 changes: 22 additions & 9 deletions src/gui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -329,27 +329,40 @@ static void ImImpl_RenderDrawLists(ImDrawData* draw_data)
GL(glDisable(GL_SCISSOR_TEST));
}

static void load_fonts_texture()
static void add_font(const char *uri, const ImWchar *ranges, bool mergmode)
{
ImGuiIO& io = ImGui::GetIO();

float scale = goxel.screen_scale;
unsigned char* pixels;
int width, height;
const void *data;
int data_size;
ImFontConfig conf;

conf.FontDataOwnedByAtlas = false;
conf.MergeMode = mergmode;
data = assets_get(uri, &data_size);
assert(data);
io.Fonts->AddFontFromMemoryTTF(
(void*)data, data_size, 14 * scale, &conf, ranges);
}

static void load_fonts_texture()
{
ImGuiIO& io = ImGui::GetIO();

unsigned char* pixels;
int width, height;
const ImWchar ranges[] = {
0x0020, 0x00FF, // Basic Latin + Latin Supplement
0x25A0, 0x25FF, // Geometric shapes
0
};
conf.FontDataOwnedByAtlas = false;
const ImWchar range_user[] = {
0xE660, 0xE6FF,
0
};

data = assets_get("asset://data/fonts/DejaVuSans.ttf", &data_size);
assert(data);
io.Fonts->AddFontFromMemoryTTF(
(void*)data, data_size, 14 * scale, &conf, ranges);
add_font("asset://data/fonts/DejaVuSans.ttf", ranges, false);
add_font("asset://data/fonts/goxel-font.ttf", range_user, true);

#if 0
conf.MergeMode = true;
Expand Down
61 changes: 61 additions & 0 deletions svg/glyphs/mouse_lmb.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
61 changes: 61 additions & 0 deletions svg/glyphs/mouse_mmb.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
61 changes: 61 additions & 0 deletions svg/glyphs/mouse_rmb.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
51 changes: 51 additions & 0 deletions tools/create_font.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/usr/bin/python3

# Goxel 3D voxels editor
#
# copyright (c) 2024-present Guillaume Chereau <[email protected]>
#
# Goxel is free software: you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option) any later
# version.
#
# Goxel is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# goxel. If not, see <http://www.gnu.org/licenses/>.

# Script that generates a font file from the svg images in svg/font/

import fontforge
import glob
import sys, os, re

START_CODE = 0xE660

def make_font_from_svgs(sources, output):
font = fontforge.font()
font.encoding = "UnicodeFull"
font.fontname = "Goxel"
font.familyname = "Goxel"
font.fullname = "Goxel"
font.version = "1.0.0"
font.weight = "Regular"
font.upos = -100
font.uwidth = 50
font.ascent = 850
font.descent = 150
font.em = 1000
for idx, file in enumerate(sorted(sources)):
assert file.endswith(".svg")
code = START_CODE + idx
glyph_name = file.replace(".svg", "")
glyph = font.createChar(code, glyph_name)
glyph.importOutlines(file)
glyph.width = 1000
font.generate(output)

sources = glob.glob('svg/glyphs/*.svg')
make_font_from_svgs(sources, "data/fonts/goxel-font.ttf")

0 comments on commit e6e6497

Please sign in to comment.