mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Direct2D: Temporarily disable window transparency for D2D windows
This commit is contained in:
parent
2a108ca582
commit
348d638581
5 changed files with 12 additions and 74 deletions
|
|
@ -573,11 +573,9 @@ protected:
|
|||
}
|
||||
|
||||
public:
|
||||
Pimpl (Direct2DGraphicsContext& ownerIn, bool opaqueIn)
|
||||
: owner (ownerIn), opaque (opaqueIn)
|
||||
explicit Pimpl (Direct2DGraphicsContext& ownerIn)
|
||||
: owner (ownerIn)
|
||||
{
|
||||
setTargetAlpha (1.0f);
|
||||
|
||||
directX->adapters.addListener (*this);
|
||||
}
|
||||
|
||||
|
|
@ -588,12 +586,6 @@ public:
|
|||
popAllSavedStates();
|
||||
}
|
||||
|
||||
void setTargetAlpha (float alpha)
|
||||
{
|
||||
backgroundColor = D2DUtilities::toCOLOR_F (Colours::black.withAlpha (opaque ? targetAlpha : 0.0f));
|
||||
targetAlpha = alpha;
|
||||
}
|
||||
|
||||
virtual SavedState* startFrame (float dpiScale)
|
||||
{
|
||||
prepare();
|
||||
|
|
@ -832,9 +824,6 @@ public:
|
|||
}
|
||||
|
||||
DirectWriteGlyphRun glyphRun;
|
||||
bool opaque = true;
|
||||
float targetAlpha = 1.0f;
|
||||
D2D1_COLOR_F backgroundColor{};
|
||||
|
||||
private:
|
||||
static void resetTransform (ID2D1DeviceContext1* context)
|
||||
|
|
|
|||
|
|
@ -373,11 +373,6 @@ private:
|
|||
if (swap.state == SwapChain::State::bufferAllocated || resizing)
|
||||
return swap.getSize();
|
||||
|
||||
// If the window alpha is less than 1.0, clip to the union of the
|
||||
// deferred repaints so the device context Clear() works correctly
|
||||
if (targetAlpha < 1.0f || ! opaque)
|
||||
return deferredRepaints.getBounds();
|
||||
|
||||
return deferredRepaints;
|
||||
}
|
||||
|
||||
|
|
@ -405,8 +400,8 @@ private:
|
|||
JUCE_DECLARE_WEAK_REFERENCEABLE (HwndPimpl)
|
||||
|
||||
public:
|
||||
HwndPimpl (Direct2DHwndContext& ownerIn, HWND hwndIn, bool opaqueIn)
|
||||
: Pimpl (ownerIn, opaqueIn),
|
||||
HwndPimpl (Direct2DHwndContext& ownerIn, HWND hwndIn)
|
||||
: Pimpl (ownerIn),
|
||||
hwnd (hwndIn)
|
||||
{
|
||||
}
|
||||
|
|
@ -645,7 +640,7 @@ public:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
Direct2DHwndContext::Direct2DHwndContext (void* windowHandle, bool opaque)
|
||||
Direct2DHwndContext::Direct2DHwndContext (HWND windowHandle)
|
||||
{
|
||||
#if JUCE_DIRECT2D_METRICS
|
||||
metrics = new Direct2DMetrics { Direct2DMetricsHub::getInstance()->lock,
|
||||
|
|
@ -654,7 +649,7 @@ Direct2DHwndContext::Direct2DHwndContext (void* windowHandle, bool opaque)
|
|||
Direct2DMetricsHub::getInstance()->add (metrics);
|
||||
#endif
|
||||
|
||||
pimpl = std::make_unique<HwndPimpl> (*this, reinterpret_cast<HWND> (windowHandle), opaque);
|
||||
pimpl = std::make_unique<HwndPimpl> (*this, windowHandle);
|
||||
updateSize();
|
||||
}
|
||||
|
||||
|
|
@ -675,11 +670,6 @@ void Direct2DHwndContext::handleShowWindow()
|
|||
pimpl->handleShowWindow();
|
||||
}
|
||||
|
||||
void Direct2DHwndContext::setWindowAlpha (float alpha)
|
||||
{
|
||||
pimpl->setTargetAlpha (alpha);
|
||||
}
|
||||
|
||||
void Direct2DHwndContext::setResizing (bool x)
|
||||
{
|
||||
pimpl->setResizing (x);
|
||||
|
|
@ -712,13 +702,7 @@ Image Direct2DHwndContext::createSnapshot() const
|
|||
|
||||
void Direct2DHwndContext::clearTargetBuffer()
|
||||
{
|
||||
// For opaque windows, clear the background to black with the window alpha
|
||||
// For non-opaque windows, clear the background to transparent black
|
||||
// In either case, add a transparency layer if the window alpha is less than 1.0
|
||||
pimpl->getDeviceContext()->Clear (pimpl->backgroundColor);
|
||||
|
||||
if (pimpl->targetAlpha < 1.0f)
|
||||
beginTransparencyLayer (pimpl->targetAlpha);
|
||||
pimpl->getDeviceContext()->Clear();
|
||||
}
|
||||
|
||||
} // namespace juce
|
||||
|
|
|
|||
|
|
@ -38,11 +38,10 @@ namespace juce
|
|||
class Direct2DHwndContext : public Direct2DGraphicsContext
|
||||
{
|
||||
public:
|
||||
Direct2DHwndContext (void* windowHandle, bool opaque);
|
||||
explicit Direct2DHwndContext (HWND windowHandle);
|
||||
~Direct2DHwndContext() override;
|
||||
|
||||
void handleShowWindow();
|
||||
void setWindowAlpha (float alpha);
|
||||
|
||||
void setResizing (bool);
|
||||
bool getResizing() const;
|
||||
|
|
@ -53,11 +52,6 @@ public:
|
|||
|
||||
Image createSnapshot() const override;
|
||||
|
||||
static Colour getBackgroundTransparencyKeyColour() noexcept
|
||||
{
|
||||
return Colour { 0xff000001 };
|
||||
}
|
||||
|
||||
private:
|
||||
struct HwndPimpl;
|
||||
std::unique_ptr<HwndPimpl> pimpl;
|
||||
|
|
|
|||
|
|
@ -38,13 +38,11 @@ namespace juce
|
|||
struct Direct2DImageContext::ImagePimpl : public Direct2DGraphicsContext::Pimpl
|
||||
{
|
||||
public:
|
||||
static constexpr auto opaque = false;
|
||||
|
||||
ImagePimpl (Direct2DImageContext& ownerIn,
|
||||
ComSmartPtr<ID2D1DeviceContext1> contextIn,
|
||||
ComSmartPtr<ID2D1Bitmap1> bitmapIn,
|
||||
const RectangleList<int>& paintAreasIn)
|
||||
: Pimpl (ownerIn, opaque),
|
||||
: Pimpl (ownerIn),
|
||||
context (std::move (contextIn)),
|
||||
bitmap (std::move (bitmapIn)),
|
||||
paintAreas (paintAreasIn)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue