mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Workaround for strange type layout bug in Windows 64.
This commit is contained in:
parent
9f52845c38
commit
2aa22684f3
2 changed files with 20 additions and 5 deletions
|
|
@ -273,7 +273,7 @@ namespace DirectWriteTypeLayout
|
|||
}
|
||||
}
|
||||
|
||||
void setupLayout (const AttributedString& text, const float& maxWidth, const float& maxHeight,
|
||||
void setupLayout (const AttributedString& text, const float maxWidth, const float maxHeight,
|
||||
ID2D1RenderTarget* const renderTarget, IDWriteFactory* const directWriteFactory,
|
||||
IDWriteFontCollection* const fontCollection, IDWriteTextLayout** dwTextLayout)
|
||||
{
|
||||
|
|
@ -334,7 +334,7 @@ namespace DirectWriteTypeLayout
|
|||
HRESULT hr = direct2dFactory->CreateDCRenderTarget (&d2dRTProp, renderTarget.resetAndGetPointerAddress());
|
||||
|
||||
ComSmartPtr<IDWriteTextLayout> dwTextLayout;
|
||||
setupLayout(text, layout.getWidth(), 1.0e7f, renderTarget, directWriteFactory, fontCollection, dwTextLayout.resetAndGetPointerAddress());
|
||||
setupLayout (text, layout.getWidth(), 1.0e7f, renderTarget, directWriteFactory, fontCollection, dwTextLayout.resetAndGetPointerAddress());
|
||||
|
||||
UINT32 actualLineCount = 0;
|
||||
hr = dwTextLayout->GetLineMetrics (nullptr, 0, &actualLineCount);
|
||||
|
|
@ -382,6 +382,20 @@ bool TextLayout::createNativeLayout (const AttributedString& text)
|
|||
|
||||
if (factories.d2dFactory != nullptr && factories.systemFonts != nullptr)
|
||||
{
|
||||
#if JUCE_64BIT
|
||||
// There's a mysterious bug in 64-bit Windows that causes garbage floating-point
|
||||
// values to be returned to DrawGlyphRun the first time that it gets used.
|
||||
// In lieu of a better plan, this bodge uses a dummy call to work around this.
|
||||
static bool hasBeenCalled = false;
|
||||
if (! hasBeenCalled)
|
||||
{
|
||||
hasBeenCalled = true;
|
||||
TextLayout dummy;
|
||||
DirectWriteTypeLayout::createLayout (dummy, text, factories.directWriteFactory,
|
||||
factories.d2dFactory, factories.systemFonts);
|
||||
}
|
||||
#endif
|
||||
|
||||
DirectWriteTypeLayout::createLayout (*this, text, factories.directWriteFactory,
|
||||
factories.d2dFactory, factories.systemFonts);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1953,10 +1953,11 @@ Image Component::createComponentSnapshot (const Rectangle<int>& areaToGrab,
|
|||
if (clipImageToComponentBounds)
|
||||
r = r.getIntersection (getLocalBounds());
|
||||
|
||||
if (r.isEmpty())
|
||||
return Image();
|
||||
|
||||
Image componentImage (flags.opaqueFlag ? Image::RGB : Image::ARGB,
|
||||
jmax (1, r.getWidth()),
|
||||
jmax (1, r.getHeight()),
|
||||
true);
|
||||
r.getWidth(), r.getHeight(), true);
|
||||
|
||||
Graphics imageContext (componentImage);
|
||||
imageContext.setOrigin (-r.getX(), -r.getY());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue