feat(rdp): skalowanie pulpitu zdalnego poniżej 100% (50–90%) - #188
Merged
Conversation
Protokół zna DPI sesji tylko w zakresie 100..500% (ulDesktopScaleFactor), więc pomniejszenia nie da się zrobić tą drogą. Realizujemy je drugim mechanizmem: DPI zostaje na 100%, a klient żąda pulpitu WIĘKSZEGO niż panel (100/75 = 1.33×) i wciska go SmartSizingiem — więcej pulpitu, drobniejszy interfejs, kosztem lekkiego rozmycia (skalowanie w dół wygląda znacznie lepiej niż w górę). - RdpDisplay: MinScale 50, ProtocolMinScale 100, DesktopScaleFactor() przycina DPI do zakresu protokołu, ResolutionMultiplier()/ScaleResolution() liczą powiększoną rozdzielczość. Przy przekroczeniu limitu sesji (8192) przycinamy MNOŻNIK, nie pojedynczy wymiar — proporcje pulpitu muszą zostać jak okna. - RdpDynamicResolution: mnożnik nakładany na bazę (piksele panelu albo stałą rozdzielczość) w Display-Update, ApplyExact (pełny ekran) i przed Connect; SmartSizing wymuszony także dla skali < 100%. - Tryb „jak ekran lokalny" nadal nie schodzi poniżej 100% — pomniejszenie jest świadomym wyborem, nie skutkiem dziwnego odczytu DPI. - UI: pozycje 50/60/75/80/90%; etykieta bez „(DPI)", bo poniżej 100% to nie DPI. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G2BeQc7J3e3NosuC3vvoGi
FilipB97
marked this pull request as ready for review
July 29, 2026 09:38
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Co i dlaczego
Dopełnienie #187: lista skalowania miała tylko 100–200%, bo
ulDesktopScaleFactor(
UpdateSessionDisplaySettings) przyjmuje wyłącznie 100..500% — mniejsze wartości serwerignoruje, więc „DPI 75%" po prostu nie istnieje w protokole.
Pomniejszenie realizujemy więc drugim mechanizmem: DPI zostaje na 100%, ale klient żąda pulpitu
większego niż panel (dla 75% →
100/75 = 1.33×) i wciska go w okno SmartSizingiem. Efekt jestten sam, o który chodzi — więcej pulpitu, drobniejszy interfejs — kosztem lekkiego rozmycia
(skalowanie w dół wygląda znacznie lepiej niż w górę, więc w praktyce jest to znośne).
Nowe pozycje: 50%, 60%, 75%, 80%, 90% obok dotychczasowych 100–200%.
Zmiany
Core/RdpDisplay.csMinScale = 50(dół suwaka) obok nowegoProtocolMinScale = 100(dół DPI w protokole).DesktopScaleFactor(scale)— przycina DPI do[100..500], więc dla 75% leci 100%.ResolutionMultiplier(scale)—1.0dla ≥ 100%,100/scaleponiżej.ScaleResolution(w, h, scale)— nakłada mnożnik na bazę i normalizuje. Gdy wynik przekraczalimit sesji (8192), przycinamy mnożnik, nie pojedynczy wymiar: inaczej pulpit dostałby inne
proporcje niż okno i obraz byłby rozciągnięty.
RdpDynamicResolution— mnożnik nakładany na bazę (piksele panelu albo stałą rozdzielczość)w trzech miejscach: Display-Update po resize,
ApplyExact(pełny ekran) iApplyPreConnect.SmartSizing wymuszony również dla skali < 100% — tam pomniejszenie na nim polega.
pomiaru DPI, a nie życzenie użytkownika. Pomniejszenie wybiera się świadomie z listy.
i uprzedza o rozmyciu. README + ROADMAP: „50–200%".
Testy
RdpDisplayTestsrozszerzone:DesktopScaleFactor(50/75 → 100, 150 → 150, 500 → 500),ResolutionMultiplier(100/150/0 → 1.0; 50 → 2.0; 75 → 1.33; 80 → 1.25),ScaleResolution(1920×1080 @ 75% → 2560×1440, @ 50% → 3840×2160, @ 150% → bez zmian),przycinanie mnożnika z zachowaniem proporcji (6000×3000 @ 50% → 8192×4096), odrzucenie zbyt
małej bazy. Zaktualizowane progi w
ParseScale/EffectiveScale(dół 50 zamiast 100).net8.0-windows.robi się zbyt miękki) oraz pełny ekran przy skali < 100%.
Uwagi
zrobić „ostro", bo serwer nie potrafi wyrenderować UI mniejszego niż 100% DPI.
2560×1440 zmniejszona do okna). Konsekwentne znaczenie („tak duży wygląda interfejs względem
natywnego"), ale warto o tym pamiętać przy czytaniu ustawień.
podziału), Display-Update jest teraz pomijany zamiast wysyłać zniekształcone 200×200 — sesja
zostaje na poprzedniej rozdzielczości, a dopasowanie robi SmartSizing (w panelach i tak włączony).
Generated by Claude Code