1
0
Fork 0
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:
jules 2012-10-24 10:45:44 +01:00
parent 9f52845c38
commit 2aa22684f3
2 changed files with 20 additions and 5 deletions

View file

@ -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;

View file

@ -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());