Skip to content

Instantly share code, notes, and snippets.

@malustewart
Last active September 2, 2023 19:53
Show Gist options
  • Save malustewart/8dba3ce645d1fd6716be6bbd1d48788c to your computer and use it in GitHub Desktop.
Save malustewart/8dba3ce645d1fd6716be6bbd1d48788c to your computer and use it in GitHub Desktop.
Consultas de ImGui para EDA 1er cuatrimestre 2020

ImGui consultas 2020 1C

> ¿Cómo cambio el tamaño de las fonts?

En DemoWindow > Configuration > Fonts :

  • Para cambiar el tamaño de la font de una sola ventana, existe ImGui::SetWindowFontScale(window_scale), donde window_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

> ¿Cómo fijo la posición de las ventanas?

En este issue del repo de GitHub de ImGui el autor explica cómo anclar las ventanas a una posición fija.

  1. Para fijar la posición inicial de una ventana que está por crearse existe la funcion ImGui::SetNextWindowPos( ... ). La línea 273 de imgui_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 flag ImGuiCond_Always. Estos flags estan definidos en la línea 1185 de imgui.h
  1. 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 al Begin( ... ) 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.

> ¿Cómo centro un texto?

  • 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 un ImVec2 (estructura con dos variables: x e y) que guarda el tamaño que ocuparía el widget ImGui::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();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment