fix(primitives_gallery): preserve scroll position when font size changes
Cuando se cambia "Size" en Settings la fuente se escala via style.FontSizeBase y el contenido del child "##gallery_content" crece o encoge proporcionalmente. La scroll_y se quedaba en pixeles absolutos, asi que la linea logica visible "se bajaba" al usuario tras el cambio de zoom. Fix: cachear FontSizeBase entre frames y, cuando cambia, escalar scroll_y por el ratio nuevo/viejo. Mantiene la misma linea arriba del viewport — sin saltos.
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#include "demo.h"
|
||||
#include "capture.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
@@ -154,6 +155,20 @@ static void render() {
|
||||
ImGui::BeginChild("##gallery_content", ImVec2(0, 0),
|
||||
ImGuiChildFlags_Borders,
|
||||
ImGuiWindowFlags_HorizontalScrollbar);
|
||||
// Cuando cambia el tamaño de fuente (Settings > Size), el contenido
|
||||
// del child crece/encoge pero la posicion de scroll en pixeles
|
||||
// no — efecto: lo visible "se baja". Escalamos scroll_y por el
|
||||
// ratio de fuentes para mantener la misma linea logica arriba.
|
||||
{
|
||||
static float s_prev_font_size = 0.0f;
|
||||
float cur_font_size = ImGui::GetStyle().FontSizeBase;
|
||||
if (s_prev_font_size > 0.0f &&
|
||||
std::fabs(s_prev_font_size - cur_font_size) > 0.01f) {
|
||||
ImGui::SetScrollY(ImGui::GetScrollY() *
|
||||
(cur_font_size / s_prev_font_size));
|
||||
}
|
||||
s_prev_font_size = cur_font_size;
|
||||
}
|
||||
const DemoEntry* d = find_demo(g_selected_id);
|
||||
if (d && d->fn) d->fn();
|
||||
ImGui::EndChild();
|
||||
|
||||
Reference in New Issue
Block a user