Created base template for ImGUI application.

This commit is contained in:
Jakob Friedl
2025-09-05 10:49:27 +02:00
parent cb02d79b6e
commit e7ab8b5fac
22 changed files with 3733 additions and 276 deletions

View 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