bug(widget): la tira y el panel de detalle se cortan en Windows con el tamaño de texto por encima de 100 %
Los mantenedores suelen responder en 1 día
@matraket ya está trabajando en esto.
Desde el 1/11/2026.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 30/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- rust, typescript
Línea de trabajo
The scale conversion lives in geoOf in src/Widget.tsx, physicalPanelBounds in src/lib/detail-panel.ts, the detail conversion in src/DetailPanel.tsx, and SetWindowPos handling in src-tauri/src/detail_geometry.rs. Start by reading how scaleFactor feeds those conversions, then check where devicePixelRatio differs from it. Done means the size conversion uses the window's real devicePixelRatio, with unit tests for the mismatch case. The issue still has open design questions, so confirm the approach with maintainers before writing code.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Pre-flight checks
- I searched existing issues and found no duplicate.
- I understand that this report enters review before implementation.
What happened?
Qué pasa
En Windows, la tira y el panel de detalle de cada proveedor se ven cortados por el borde derecho, como si tuvieran un ancho fijo. En el panel quedan cortados los porcentajes, las barras y la esquina redondeada, que se ve como un borde recto. En la tira se corta el último anillo y los iconos de acciones.
Pasa desde la instalación. No es una regresión reciente.
Causa
La app pasa los tamaños de píxeles CSS a píxeles físicos usando el scaleFactor del monitor, que solo tiene en cuenta la escala de pantalla. WebView2, en cambio, pinta el contenido con devicePixelRatio, que combina la escala de pantalla y el tamaño de texto de Accesibilidad. Si el tamaño de texto es mayor que 100 %, cada ventana nativa queda más pequeña que su contenido en esa misma proporción.
En mi caso:
- escala personalizada 102 %, así que
scaleFactor= 1,02 - tamaño de texto 106 %, así que
devicePixelRatio≈ 1,02 × 1,06 ≈ 1,081 - la ventana queda un ~6 % más estrecha que su contenido, unos 20 px en un panel de ~330 px
Lo comprobé así: con el tamaño de texto al 100 % (y pulsando «Aplicar»), las dos superficies se ven bien.
Dónde ocurre:
src/Widget.tsxgeoOf:sf = m.scaleFactor.- Tira:
src/Widget.tsxmide la tira en CSS px (ResizeObserver) y la convierte conphysicalPanelBounds(win, geo.sf)antes deset_widget_bounds. - Detalle:
src/DetailPanel.tsxconvierte conphysicalPanelBounds(detailBounds(data, next), data.scaleFactor)antes deset_detail_bounds. El recorte de superficie también escala condata.scaleFactor. src/lib/detail-panel.tsphysicalPanelBounds: multiplica posición y tamaño por el mismo factor.src-tauri/src/detail_geometry.rs:SetWindowPosaplica esos píxeles tal cual.
Contexto upstream: Tauri todavía no expone el factor de texto (tauri-apps/tauri#14711, tauri-apps/tao#1168 abierta). La documentación de WebView2 (ICoreWebView2Controller3::get_RasterizationScale) lo confirma: «The rasterization scale is the combination of the monitor DPI scale and text scaling set by the user».
Propuesta de solución
Separar las dos conversiones:
- Posiciones con
scaleFactor, como ahora, porque el área de trabajo viene en unidades del monitor. - Tamaños con el
window.devicePixelRatioreal de la ventana que contiene el contenido: el de la ventana del widget para la tira y el de la ventana de detalle para el panel. Lo mismo para la escala del recorte de superficie. - Tests unitarios de la conversión con
devicePixelRatio ≠ scaleFactor(por ejemplo 1,02 / 1,0812 y 1,25 / 1,5). Hoy ningún test cubre ese caso. Tests de no regresión paradevicePixelRatio == scaleFactor(100 %, 125 %, 200 %), que debe dar el mismo resultado que ahora. - Escuchar los cambios de
devicePixelRatio(matchMedia('(resolution: …dppx)')) para recolocar si el usuario cambia el tamaño de texto con la app abierta.
Alternativa que descarto: pasar --force-text-scale-factor=1 a WebView2 en los argumentos del navegador. Haría que Quorb ignore el tamaño de texto del usuario, que es justo un ajuste de accesibilidad, y no he comprobado que funcione.
Preguntas para cerrar la spec:
- ¿Os parece bien el enfoque de separar posiciones y tamaños, o preferís esperar a que Tauri exponga el factor de texto?
- En Linux y macOS,
devicePixelRatioyscaleFactordeberían coincidir, así que el cambio no tendría efecto. ¿Lo limitamos a Windows o lo dejamos general?
Steps to reproduce
- En Windows 11, ir a Configuración > Accesibilidad > Tamaño de texto, subirlo por encima de 100 % (por ejemplo 110 %) y pulsar «Aplicar».
- Abrir Quorb, o cerrarlo desde la bandeja y volver a abrirlo.
- Mirar la tira y abrir el panel de detalle de un proveedor.
Expected behavior
Que la tira y el panel se vean enteros, con el contenido y las esquinas redondeadas dentro de la ventana, sea cual sea el tamaño de texto de Windows.
Environment
Windows 11
Quorb: v0.8.0 (pasaba también en versiones anteriores, desde la instalación)
Escala de pantalla: personalizada 102 %
Tamaño de texto (Accesibilidad): 106 %
Reproducido con un monitor (en casa); en el trabajo uso 3 monitores, no medido con esta configuración
Affected area
Application behavior
- Lenguaje dominante
- TypeScript
- Estrellas
- 10
- Forks
- 2
- Merge medio
- 4 h 57 min
- PR fusionados (30 d)
- 121
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de egdev6/quorb
-
Antigravity (agy CLI): not working on macOS — wrong log path and process detectionPosiblemente ocupada @EzequielKoulaksezian la tomó hoy. Abiertostatus:approved type:bug
egdev6/quorb#237 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
type:feature
Dificultad 4/5 3-5 días Aptitud para principiantes 18/100
Los mantenedores suelen responder en 1 día
-
type:feature
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
Los mantenedores suelen responder en 1 día
-
type:feature
Dificultad 5/5 Más de una semana Aptitud para principiantes 10/100
Los mantenedores suelen responder en 1 día
-
bug(detail): el panel de detalle no ajusta su ancho al área de trabajo (seguimiento de #228)Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 50/100
Los mantenedores suelen responder en 1 día
Todos los issues de egdev6/quorb
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
oxidecomputer/skepsis#102 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
voidzero-dev/void#677 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
kunchenguid/gh-axi#247 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
lidge-jun/opencodex#8101 · 2 comentarios ·
Los mantenedores suelen responder en 1 día