Created base template for ImGUI application.
This commit is contained in:
76
src/client/utils/setupFonts.nim
Normal file
76
src/client/utils/setupFonts.nim
Normal file
@@ -0,0 +1,76 @@
|
||||
import os, strformat
|
||||
import imguin/[cimgui, simple]
|
||||
|
||||
import ./globals
|
||||
import ../utils/fonticon/IconsFontAwesome6
|
||||
export IconsFontAwesome6
|
||||
|
||||
let IconfontFullPath = fmt"{CONQUEST_ROOT}/src/client/utils/fonticon/fa6/fa-solid-900.ttf"
|
||||
|
||||
# Convert point to pixel
|
||||
proc point2px*(point: float32): cfloat = ((point * 96) / 72).cfloat
|
||||
|
||||
# setupFonts
|
||||
type
|
||||
TFontInfo = object
|
||||
fontDir, osRootDir: string
|
||||
fontTable: seq[(string, string, float)] # path, name, point
|
||||
|
||||
when defined(windows):
|
||||
const
|
||||
fontInfo = TFontInfo(
|
||||
osRootDir: os.getEnv("windir"), # get OS root
|
||||
fontDir: "fonts",
|
||||
fontTable: @[ #
|
||||
("segoeui.ttf", "Seoge UI", 14.4),
|
||||
]
|
||||
)
|
||||
else: # For Debian/Ubuntu/Mint
|
||||
const
|
||||
fontInfo = TFontInfo(
|
||||
osRootDir: "/",
|
||||
fontDir: "usr/share/fonts",
|
||||
fontTable: @[
|
||||
("truetype/noto/NotoSansMono-Regular.ttf", "Noto Sans Mono", 20.0)
|
||||
]
|
||||
)
|
||||
|
||||
proc new_ImFontConfig(): ImFontConfig =
|
||||
# Custom constructor with default params taken from imgui.h
|
||||
result.FontDataOwnedByAtlas = true
|
||||
result.FontNo = 0
|
||||
result.OversampleH = 3
|
||||
result.OversampleV = 1
|
||||
result.PixelSnapH = false
|
||||
result.GlyphMaxAdvanceX = float.high
|
||||
result.RasterizerMultiply = 1.0
|
||||
result.RasterizerDensity = 1.0
|
||||
result.MergeMode = false
|
||||
result.EllipsisChar = cast[ImWchar](-1)
|
||||
|
||||
proc setupFonts*(): (bool, string, string) =
|
||||
let pio = igGetIO()
|
||||
var config {.global.} = new_ImFontConfig()
|
||||
|
||||
# Load first base font
|
||||
result = (false, "Default", "ProggyClean.ttf")
|
||||
var seqFontNames: seq[(string, string)]
|
||||
for (fontName, fontTitle, point) in fontInfo.fontTable:
|
||||
let fontFullPath = os.joinPath(fontInfo.osRootDir, fontInfo.fontDir, fontName)
|
||||
if os.fileExists(fontFullPath):
|
||||
seqFontNames.add((fontName, fontTitle))
|
||||
pio.Fonts.ImFontAtlas_AddFontFromFileTTF(fontFullPath.cstring, point.point2px, nil, nil)
|
||||
break
|
||||
|
||||
if seqFontNames.len > 0:
|
||||
result = (true, seqFontNames[0][0].extractFilename, seqFontNames[0][1])
|
||||
else:
|
||||
pio.Fonts.ImFontAtlas_AddFontDefault(nil)
|
||||
|
||||
# Merge Icon font
|
||||
config.MergeMode = true
|
||||
var ranges_icon_fonts {.global.} = [ICON_MIN_FA.uint16, ICON_MAX_FA.uint16, 0]
|
||||
if os.fileExists(IconfontFullPath):
|
||||
pio.Fonts.ImFontAtlas_AddFontFromFileTTF(IconfontFullPath.cstring, 11.point2px, addr config, addr ranges_icon_fonts[0])
|
||||
else:
|
||||
echo "Error!: Can't find Icon fonts: ", IconfontFullPath
|
||||
Reference in New Issue
Block a user