package imgui // #include "FontConfigWrapper.h" import "C" // FontConfig describes properties of a single font. type FontConfig uintptr // DefaultFontConfig lets ImGui take default properties as per implementation. // The properties of the default configuration cannot be changed using the SetXXX functions. const DefaultFontConfig FontConfig = 0 func (config FontConfig) handle() C.IggFontConfig { return C.IggFontConfig(config) } // NewFontConfig creates a new font configuration. // Delete must be called on the returned config. func NewFontConfig() FontConfig { configHandle := C.iggNewFontConfig() return FontConfig(configHandle) } // Delete removes the font configuration and resets it to the DefaultFontConfig. func (config *FontConfig) Delete() { if *config != DefaultFontConfig { C.iggFontConfigDelete(config.handle()) *config = DefaultFontConfig } } // SetSize sets the size in pixels for rasterizer (more or less maps to the // resulting font height). func (config FontConfig) SetSize(sizePixels float32) { if config != DefaultFontConfig { C.iggFontConfigSetSize(config.handle(), C.float(sizePixels)) } } // SetOversampleH sets the oversampling amount for the X axis. // Rasterize at higher quality for sub-pixel positioning. // We don't use sub-pixel positions on the Y axis. func (config FontConfig) SetOversampleH(value int) { if config != DefaultFontConfig { C.iggFontConfigSetOversampleH(config.handle(), C.int(value)) } } // SetOversampleV sets the oversampling amount for the Y axis. // Rasterize at higher quality for sub-pixel positioning. // We don't use sub-pixel positions on the Y axis. func (config FontConfig) SetOversampleV(value int) { if config != DefaultFontConfig { C.iggFontConfigSetOversampleV(config.handle(), C.int(value)) } } // SetPixelSnapH aligns every glyph to pixel boundary if enabled. Useful e.g. if // you are merging a non-pixel aligned font with the default font. If enabled, // you can set OversampleH/V to 1. func (config FontConfig) SetPixelSnapH(value bool) { if config != DefaultFontConfig { C.iggFontConfigSetPixelSnapH(config.handle(), castBool(value)) } } // SetGlyphMinAdvanceX sets the minimum AdvanceX for glyphs. // Set Min to align font icons, set both Min/Max to enforce mono-space font. func (config FontConfig) SetGlyphMinAdvanceX(value float32) { if config != DefaultFontConfig { C.iggFontConfigSetGlyphMinAdvanceX(config.handle(), C.float(value)) } } // SetGlyphMaxAdvanceX sets the maximum AdvanceX for glyphs. // Set both Min/Max to enforce mono-space font. func (config FontConfig) SetGlyphMaxAdvanceX(value float32) { if config != DefaultFontConfig { C.iggFontConfigSetGlyphMaxAdvanceX(config.handle(), C.float(value)) } } // SetMergeMode merges the new fonts into the previous font if enabled. This way // you can combine multiple input fonts into one (e.g. ASCII font + icons + // Japanese glyphs). You may want to use GlyphOffset.y when merge font of // different heights. func (config FontConfig) SetMergeMode(value bool) { if config != DefaultFontConfig { C.iggFontConfigSetMergeMode(config.handle(), castBool(value)) } } // getFontDataOwnedByAtlas gets the current ownership status of the font data. func (config FontConfig) getFontDataOwnedByAtlas() bool { if config != DefaultFontConfig { return C.iggFontConfigGetFontDataOwnedByAtlas(config.handle()) != 0 } return true } // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. func (config FontConfig) SetRasterizerMultiply(value float32) { if config != DefaultFontConfig { C.iggFontConfigSetRasterizerMultiply(config.handle(), C.float(value)) } } // FontBuilderFlags returns settings for custom font builder. func (config FontConfig) FontBuilderFlags() uint { return uint(C.iggFontConfigGetFontBuilderFlags(config.handle())) } // SetFontBuilderFlags sets settings for custom font builder. THIS IS BUILDER IMPLEMENTATION DEPENDENT. Leave as zero if unsure. func (config FontConfig) SetFontBuilderFlags(flags uint) { C.iggFontConfigSetFontBuilderFlags(config.handle(), C.uint(flags)) }