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 "demo.h"
|
||||||
#include "capture.h"
|
#include "capture.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -154,6 +155,20 @@ static void render() {
|
|||||||
ImGui::BeginChild("##gallery_content", ImVec2(0, 0),
|
ImGui::BeginChild("##gallery_content", ImVec2(0, 0),
|
||||||
ImGuiChildFlags_Borders,
|
ImGuiChildFlags_Borders,
|
||||||
ImGuiWindowFlags_HorizontalScrollbar);
|
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);
|
const DemoEntry* d = find_demo(g_selected_id);
|
||||||
if (d && d->fn) d->fn();
|
if (d && d->fn) d->fn();
|
||||||
ImGui::EndChild();
|
ImGui::EndChild();
|
||||||
|
|||||||
Reference in New Issue
Block a user