Nas configurações do Windows 10 (a partir da versão 1809), há uma configuração "Fix scaling for apps" (em Settings -> Display -> Advanced Scaling Settings), com uma chave seletora que diz:
Deixe o Windows tentar corrigir os aplicativos para que não fiquem embaçados
Entendo que isso muda a forma como o Windows e os aplicativos do Windows lidam com exibições de alto DPI, mas o que exatamente isso faz?
Consegui corrigir um aplicativo com comportamento inadequado alternando essa opção, mas gostaria de entender exatamente o que essa configuração faz, para que eu possa reconhecer quaisquer problemas que ela possa causar.
tl;dr: A configuração controla GDI Scaling , uma técnica específica para dimensionar a exibição de um programa.
Para entender o que o Windows faz, é necessário entender como um sistema operacional lida com exibições gráficas.
Um programa gráfico desenha seus gráficos, que são formas, textos e imagens, em uma superfície virtual. Quando chega a hora de exibir, o sistema operacional traduz essa superfície virtual para o dispositivo de destino, que pode ser um monitor ou uma impressora. Dessa forma, o programa não precisa conhecer e se adaptar ao meio de exibição, pois essa parte é feita pelo SO e seus drivers.
Os monitores mais recentes de alta resolução e alto DPI criaram o problema de que a exibição de alguns programas pode ser muito pequena para o usuário, exigindo dimensionamento. A Microsoft criou para isso a API para gráficos DPI-Aware, então a exibição pelo programa é adaptada automaticamente, mas poucos programas realmente utilizam essa interface.
Para programas que não são DPI-Aware (que é a maioria deles), a Microsoft criou mecanismos automáticos para aumentar a exibição. Seu primeiro mecanismo do tipo (já presente no Windows Vista) era baseado em algoritmos de redimensionamento de imagem, o que significa que o Windows pegou a tela pintada pelo programa e a ampliou, traduzindo de fato um pixel desenhado em mais de um. O resultado é o mesmo que ampliar uma imagem, a imagem é maior, mas perderá qualidade e aparecerá borrada.
A segunda e mais recente tentativa da Microsoft de resolver o problema (introduzida no Windows 10 V1703) é interceptar operações gráficas (GDI) enquanto o programa está desenhando em sua superfície virtual. A Microsoft se refere a isso como GDI Scaling —consulte High DPI Desktop Application Development on Windows . Por exemplo, o programa pode escrever texto usando a fonte em 12 pontos. No entanto, se o destino for uma tela ampliada em 150%, o Windows usará uma fonte definida para 18 pontos, o que fornece resultados perfeitamente legíveis. Outras chamadas de desenho são interceptadas de forma semelhante.
Esse método é invasivo e pode falhar/interferir com o programa em alguns casos (consulte, por exemplo , problemas de dimensionamento do Windows para dispositivos de alto DPI ), e é por isso que o Windows precisa da permissão do usuário para usá-lo. As permissões podem ser fornecidas em todo o sistema (a configuração "Corrigir escala para aplicativos" sobre a qual você perguntou) ou para cada programa por meio das propriedades do executável (guia "Compatibilidade" / "Alterar configurações de DPI alto").
O Windows 10 pode "ampliar" software e aplicativos que desenham via GDI (incluindo todas as partes do sistema operacional), dimensionando todos os elementos vetoriais para a porcentagem desejada.
Por exemplo, definir uma escala de 150% redimensionará a janela de 600x400 px para 900x600 px; Ícones de 32x32 px na janela dimensionada serão redimensionados para 48x48 px; um botão 8 px do topo e 16 px da esquerda será movido 12 px do topo e 24 px da esquerda, e fontes de 12 pontos serão desenhadas como 18 pontos. Definir uma escala de 200% duplicará os parâmetros originais e assim por diante.
Isso preservará o tamanho e a posição relativos de todos os elementos, tornando os itens mais fáceis de ler e clicar ou tocar, portanto, personalizar a configuração de escala pode ser útil de várias maneiras: 1) tornar o sistema e o aplicativo mais legíveis em telas de alto DPI 2 ) permitem ajustar o tamanho dos itens para pessoas com deficiência visual 3) tornam o sistema mais amigável ao toque, pois o toque é menos preciso do que clicar com o mouse e requer mais espaço entre os itens clicáveis
Esse mecanismo de dimensionamento (chamado "GDI Scaling") na verdade redesenha a saída GDI do software/aplicativo na tela e foi introduzido no Vista - está ganhando força na última década à medida que telas sensíveis ao toque e de alto DPI se tornam cada vez mais comuns. Ele complementa o método de dimensionamento mais antigo que remonta ao XP, onde a saída gráfica era tratada como uma imagem bitmap e dimensionada de acordo, o que fazia com que os aplicativos dimensionados parecessem borrados e claramente distinguíveis da renderização nativa com reconhecimento de DPI, é por isso que o novo mecanismo é referido em termos de "Deixe o Windows tentar corrigir os aplicativos para que não fiquem embaçados".
Infelizmente GDI Scaling não ajuda para gráficos de bitmap, então eles ainda são dimensionados como bitmaps - no exemplo anterior, um ícone de 32x32 px se tornará 48x48 px, mas será preenchido com o bitmap de resolução inferior de 32x32px aprimorado de qualquer maneira.
Pior ainda, alguns softwares podem se comportar mal de várias maneiras imprevisíveis se os desenvolvedores originalmente confiarem em suposições que são quebradas pelo sistema modificando o GDI em tempo real para dimensionar a saída na tela, portanto, como um papel de polegar ao alterar as configurações de dimensionamento do software antigo, deve ser cuidadosamente testado. Portanto, o dimensionamento GDI pode ser controlado pela configuração "Corrigir dimensionamento para aplicativos".
Eu me deparei com esse problema recentemente. Eu acrescentaria às soluções acima, que isso ajuda a corrigir o cenário em que seu laptop tem dimensionamento ativado e você deseja executar um aplicativo "não dimensionado" em seu (s) monitor (es) secundário (s).
Neste exemplo, o laptop é uma tela de alta resolução e apenas 13 polegadas de tamanho, portanto, é necessário dimensionar para ler as fontes menores, mas tenho vários monitores conectados por meio de conexão USB-C que são HD padrão de 24" e não precisam de fator de dimensionamento aplicado . Ao usar a função de dimensionamento e definir a função de compatibilidade por aplicativo->Alterar configurações de DPI alto, posso remover o dimensionamento dos aplicativos que normalmente executo nos monitores grandes e deixá-lo funcional para aqueles que uso no laptop. Não é uma correção perfeita, mas ajuda no meu cenário.