From 94da373c31eb04ec4cff03c1ee6eb51a85ce11f7 Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 17 Sep 2013 10:23:17 +0100 Subject: [PATCH] Fixed a couple of rendering problems when using global scale factors. --- extras/Introjucer/Source/Project/jucer_Module.cpp | 3 +-- modules/juce_gui_basics/components/juce_Component.cpp | 11 ++++++++--- .../juce_gui_basics/windows/juce_ComponentPeer.cpp | 8 +++++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/extras/Introjucer/Source/Project/jucer_Module.cpp b/extras/Introjucer/Source/Project/jucer_Module.cpp index 86a9dd14fe..a99c009ffd 100644 --- a/extras/Introjucer/Source/Project/jucer_Module.cpp +++ b/extras/Introjucer/Source/Project/jucer_Module.cpp @@ -138,8 +138,7 @@ File AvailableModuleList::getModulesFolderForJuceOrModulesFolder (const File& f) File AvailableModuleList::getModulesFolderForExporter (const ProjectExporter& exporter) { File f (exporter.getProject().resolveFilename (exporter.getJuceFolderString())); - f = getModulesFolderForJuceOrModulesFolder (f); - return f; + return getModulesFolderForJuceOrModulesFolder (f); } File AvailableModuleList::getDefaultModulesFolder (Project* project) diff --git a/modules/juce_gui_basics/components/juce_Component.cpp b/modules/juce_gui_basics/components/juce_Component.cpp index 18255f00c5..ebae01c3d5 100644 --- a/modules/juce_gui_basics/components/juce_Component.cpp +++ b/modules/juce_gui_basics/components/juce_Component.cpp @@ -1872,9 +1872,14 @@ void Component::internalRepaintUnchecked (const Rectangle& area, const bool CHECK_MESSAGE_MANAGER_IS_LOCKED if (ComponentPeer* const peer = getPeer()) - peer->repaint (ComponentHelpers::scaledScreenPosToUnscaled (*this, - affineTransform != nullptr ? area.transformedBy (*affineTransform) - : area)); + { + // Tweak the scaling so that the component's integer size exactly aligns with the peer's scaled size + const Rectangle peerBounds (peer->getBounds()); + const Rectangle scaled (area * Point (peerBounds.getWidth() / (float) getWidth(), + peerBounds.getHeight() / (float) getHeight())); + + peer->repaint (affineTransform != nullptr ? scaled.transformedBy (*affineTransform) : scaled); + } } else { diff --git a/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp b/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp index 475d24dd03..01daad7968 100644 --- a/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp +++ b/modules/juce_gui_basics/windows/juce_ComponentPeer.cpp @@ -111,10 +111,12 @@ void ComponentPeer::handlePaint (LowLevelGraphicsContext& contextToPaintTo) if (component.isTransformed()) g.addTransform (component.getTransform()); - const float masterScale = component.getDesktopScaleFactor(); + const Rectangle peerBounds (getBounds()); - if (masterScale != 1.0f) - g.addTransform (AffineTransform::scale (masterScale)); + if (peerBounds.getWidth() != component.getWidth() || peerBounds.getHeight() != component.getHeight()) + // Tweak the scaling so that the component's integer size exactly aligns with the peer's scaled size + g.addTransform (AffineTransform::scale (peerBounds.getWidth() / (float) component.getWidth(), + peerBounds.getHeight() / (float) component.getHeight())); #if JUCE_ENABLE_REPAINT_DEBUGGING g.saveState();