76 lines
2.5 KiB
Nim
76 lines
2.5 KiB
Nim
|
|
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
|