From 074a8c05dd04f5001fc4721b47371882f918be40 Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 3 Apr 2012 13:31:27 +0100 Subject: [PATCH] Fixes to allow OpenGL contexts to be attached to a top-level component. --- .../components/juce_Component.cpp | 16 ++++++++-------- modules/juce_opengl/native/juce_OpenGL_win32.h | 3 ++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/modules/juce_gui_basics/components/juce_Component.cpp b/modules/juce_gui_basics/components/juce_Component.cpp index 94cfe3479d..53e64e1511 100644 --- a/modules/juce_gui_basics/components/juce_Component.cpp +++ b/modules/juce_gui_basics/components/juce_Component.cpp @@ -1810,6 +1810,14 @@ void Component::internalRepaintUnchecked (const Rectangle& area, const bool { if (flags.visibleFlag) { + if (cachedImage != nullptr) + { + if (isEntireComponent) + cachedImage->invalidateAll(); + else + cachedImage->invalidate (area); + } + if (flags.hasHeavyweightPeerFlag) { // if component methods are being called from threads other than the message @@ -1823,14 +1831,6 @@ void Component::internalRepaintUnchecked (const Rectangle& area, const bool } else { - if (cachedImage != nullptr) - { - if (isEntireComponent) - cachedImage->invalidateAll(); - else - cachedImage->invalidate (area); - } - if (parentComponent != nullptr) parentComponent->internalRepaint (ComponentHelpers::convertToParentSpace (*this, area)); } diff --git a/modules/juce_opengl/native/juce_OpenGL_win32.h b/modules/juce_opengl/native/juce_OpenGL_win32.h index 907b41a133..80e2b0604a 100644 --- a/modules/juce_opengl/native/juce_OpenGL_win32.h +++ b/modules/juce_opengl/native/juce_OpenGL_win32.h @@ -113,6 +113,7 @@ public: unsigned int getFrameBufferID() const noexcept { return 0; } private: + Component dummyComponent; ScopedPointer nativeWindow; HGLRC renderContext; HDC dc; @@ -137,7 +138,7 @@ private: void createNativeWindow (Component& component) { Component* topComp = component.getTopLevelComponent(); - nativeWindow = createNonRepaintingEmbeddedWindowsPeer (&component, topComp->getWindowHandle()); + nativeWindow = createNonRepaintingEmbeddedWindowsPeer (&dummyComponent, topComp->getWindowHandle()); updateWindowPosition (topComp->getLocalArea (&component, component.getLocalBounds())); nativeWindow->setVisible (true); dc = GetDC ((HWND) nativeWindow->getNativeHandle());