Browse Source

Fixed a couple of rendering problems when using global scale factors.

tags/2021-05-28
jules 11 years ago
parent
commit
94da373c31
3 changed files with 14 additions and 8 deletions
  1. +1
    -2
      extras/Introjucer/Source/Project/jucer_Module.cpp
  2. +8
    -3
      modules/juce_gui_basics/components/juce_Component.cpp
  3. +5
    -3
      modules/juce_gui_basics/windows/juce_ComponentPeer.cpp

+ 1
- 2
extras/Introjucer/Source/Project/jucer_Module.cpp View File

@@ -138,8 +138,7 @@ File AvailableModuleList::getModulesFolderForJuceOrModulesFolder (const File& f)
File AvailableModuleList::getModulesFolderForExporter (const ProjectExporter& exporter) File AvailableModuleList::getModulesFolderForExporter (const ProjectExporter& exporter)
{ {
File f (exporter.getProject().resolveFilename (exporter.getJuceFolderString())); File f (exporter.getProject().resolveFilename (exporter.getJuceFolderString()));
f = getModulesFolderForJuceOrModulesFolder (f);
return f;
return getModulesFolderForJuceOrModulesFolder (f);
} }
File AvailableModuleList::getDefaultModulesFolder (Project* project) File AvailableModuleList::getDefaultModulesFolder (Project* project)


+ 8
- 3
modules/juce_gui_basics/components/juce_Component.cpp View File

@@ -1872,9 +1872,14 @@ void Component::internalRepaintUnchecked (const Rectangle<int>& area, const bool
CHECK_MESSAGE_MANAGER_IS_LOCKED CHECK_MESSAGE_MANAGER_IS_LOCKED
if (ComponentPeer* const peer = getPeer()) 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<int> peerBounds (peer->getBounds());
const Rectangle<int> scaled (area * Point<float> (peerBounds.getWidth() / (float) getWidth(),
peerBounds.getHeight() / (float) getHeight()));
peer->repaint (affineTransform != nullptr ? scaled.transformedBy (*affineTransform) : scaled);
}
} }
else else
{ {


+ 5
- 3
modules/juce_gui_basics/windows/juce_ComponentPeer.cpp View File

@@ -111,10 +111,12 @@ void ComponentPeer::handlePaint (LowLevelGraphicsContext& contextToPaintTo)
if (component.isTransformed()) if (component.isTransformed())
g.addTransform (component.getTransform()); g.addTransform (component.getTransform());
const float masterScale = component.getDesktopScaleFactor();
const Rectangle<int> 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 #if JUCE_ENABLE_REPAINT_DEBUGGING
g.saveState(); g.saveState();


Loading…
Cancel
Save