En DemoWindow > Configuration > Fonts
:
- Para cambiar el tamaño de la font de una sola ventana, existe
ImGui::SetWindowFontScale(window_scale)
, dondewindow_scale
es un float que va desde 0.0 (tamaño casi invisible) a 2.0 (tamaño doble que el normal). - Para cambiar el tamaño de una font en todas las ventanas, alcanza con modificar
io.FontGlobalScale
.io
es el contexto de ImGui que se obtiene en la inicialización.FontGlobalScale
es un float que va desde 0.0 (tamaño casi invisible) a 2.0 (tamaño doble que el normal).
Ver líneas 3324 a 3327 de imgui_demo.cpp
En este issue del repo de GitHub de ImGui el autor explica cómo anclar las ventanas a una posición fija.
- Para fijar la posición inicial de una ventana que está por crearse existe la funcion
ImGui::SetNextWindowPos( ... )
. La línea 273 deimgui_demo.cpp
tiene un ejemplo de uso:
ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiCond_FirstUseEver);
ImVec2
es un tipo de dato definido por ImGui que contiene dos números.ImGuiCond_FirstUseEver
es un flag de ImGui que indica que la posición de la ventana solo tiene que ser fijada la primera vez que se llama en la primera vez que se corre el programa (existe un archivo.ini
que recuerda las configuraciones de las ejecuciones pasadas del programa). Para que quede fija en todos los frames y que el usuario no pueda moverla, se utiliza el flagImGuiCond_Always
. Estos flags estan definidos en la línea 1185 deimgui.h
- Para evitar que las ventanas se muevan o se cambien de tamaño, ver
DemoWindow > Window options > No Move
. En la línea 257 se llama alBegin( ... )
de la DemoWindow:
ImGui::Begin("Dear ImGui Demo", p_open, window_flags)
El tercer parámetro es de tipo ImGuiWindowFlags
. Sirve para guardar flags que indiquen las configuraciones deseadas para la ventana que se esta creando con ImGui::Begin( ... )
. Se muestra un ejemplo para crear una ventana que no se pueda mover ni cambiar de tamaño:
ImGuiWindowFlags window_flags = 0;
window_flags |= ImGuiWindowFlags_NoMove;
window_flags |= ImGuiWindowFlags_NoResize;
ImGui::Begin("New window", &show_window, window_flags)
Las flags disponibles se encuentran definidos en la línea 766 de imgui.h
.
ImGui::SetCursorPosX(...)
cambia la coordenada horizontal del próximo widget que se dibuje.ImGui::GetCursorPosX()
devuelve la coordenada horizontal en donde ImGui planea dibujar el próximo widget.ImGui::GetWindowContentRegionWidth()
devuelve el espacio horizontal disponible para dibujar widgets (contempla el caso que se llame desde adentro de una Child Window).ImGui::CalcTextSize(...)
devuelve unImVec2
(estructura con dos variables:x
ey
) que guarda el tamaño que ocuparía el widgetImGui::Text(...)
para un string específico.
Combinando las cuatro funciones anteriores se puede centrar un texto:
ImGui::Begin("mi ventana");
// Posiciono el cursor de forma tal que el texto quede centrado
ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetWindowContentRegionWidth()/2 - ImGui::CalcTextSize("texto centrado").x / 2);
ImGui::Text("texto centrado");
// En la nueva línea, el cursor vuelve a iniciar en la izquierda
ImGui::Text("texto a la izquierda");
ImGui::End();