There is no difference between x / y scaling, but i leave the two functions.
dpi::Init() must be called before using them.
Code: Select all
DeclareModule dpi
Declare Init()
Declare ScaleX(x.i)
Declare ScaleY(y.i)
Declare UnScaleX(x.i)
Declare UnScaleY(y.i)
EndDeclareModule
Module dpi
EnableExplicit
ImportC ""
gdk_screen_get_resolution_.d(scr.i) As "gdk_screen_get_resolution"
EndImport
Global.f g_DPIScaleX, g_DPIScaleY
Procedure ScaleX(x.i)
ProcedureReturn Round(x * g_DPIScaleX, #PB_Round_Down)
EndProcedure
Procedure ScaleY(y.i)
ProcedureReturn Round(y * g_DPIScaleY, #PB_Round_Down)
EndProcedure
Procedure UnScaleX(x.i)
ProcedureReturn x / g_DPIScaleX
EndProcedure
Procedure UnScaleY(y.i)
ProcedureReturn y / g_DPIScaleY
EndProcedure
Procedure Init()
Define.i scr
gtk_init_(0, 0)
scr = gdk_screen_get_default_()
g_DPIScaleX = gdk_screen_get_resolution_(scr) / 96.0
g_DPIScaleY = g_DPIScaleX
EndProcedure
EndModule
;- TEST
dpi::Init()
Debug dpi::ScaleX(100)