From 30669f970b2144089b1b192e2d53cb6826555237 Mon Sep 17 00:00:00 2001 From: sergio Date: Thu, 21 May 2026 02:50:49 +0000 Subject: [PATCH] =?UTF-8?q?fix(mirada-compositor):=20backend=20DRM=20?= =?UTF-8?q?=E2=80=94=20modo=20de=20mayor=20=C3=A1rea=20+=20log=20de=20modo?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El borde negro seguía: la marca PREFERRED del panel no es fiable (a veces apunta a un modo menor). Ahora se elige el modo de mayor área (a igualdad, mayor refresco), y se registran todos los modos del conector para diagnóstico. Co-Authored-By: Claude Opus 4.7 --- .../apps/mirada-compositor/src/drm_backend.rs | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/crates/apps/mirada-compositor/src/drm_backend.rs b/crates/apps/mirada-compositor/src/drm_backend.rs index 014efdd..6baec05 100644 --- a/crates/apps/mirada-compositor/src/drm_backend.rs +++ b/crates/apps/mirada-compositor/src/drm_backend.rs @@ -263,17 +263,25 @@ pub fn run() -> Result<(), Box> { continue; } let name = format!("{:?}-{}", conn.interface(), conn.interface_id()); - // El modo: el marcado PREFERRED (el nativo del panel) y, si no - // hay ninguno marcado, el de mayor área. `modes()[0]` no sirve — - // suele ser un modo menor (p. ej. 1920×1080 en un panel 16:10). + // Registra todos los modos del panel — diagnóstico. + for m in conn.modes() { + let (mw, mh) = m.size(); + let pref = if m.mode_type().contains(ModeTypeFlags::PREFERRED) { + " [PREFERRED]" + } else { + "" + }; + eprintln!(" modo de «{name}»: {mw}×{mh} @ {} Hz{pref}", m.vrefresh()); + } + // Elige el modo de mayor área (a igualdad, mayor refresco) — el + // nativo del panel. La marca PREFERRED no es fiable: a veces + // señala un modo menor. let mode = conn .modes() .iter() - .find(|m| m.mode_type().contains(ModeTypeFlags::PREFERRED)) - .or_else(|| { - conn.modes() - .iter() - .max_by_key(|m| m.size().0 as u32 * m.size().1 as u32) + .max_by_key(|m| { + let (mw, mh) = m.size(); + (mw as u32 * mh as u32, m.vrefresh()) }) .copied(); let Some(mode) = mode else {