Support for non-AA text on Windows
In commit3ecd8f19a9
(vcl cairo text renderer: support non-AA text, 2018-07-26) and its follow-up commite6538f5bdd
(tdf#118966 vcl: add a flag to determine if AA of fonts is used from the system, 2018-07-28), non-antialiased text got supported in bitmap export using cairo. This change makes that support available on Windiws, including Skia. Change-Id: I1fae726539347f826e2d62246d35315e7954cf83 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171967 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins
This commit is contained in:
parent
dac249a0de
commit
52a2dd0eea
4 changed files with 49 additions and 6 deletions
|
@ -941,6 +941,47 @@ CPPUNIT_TEST_FIXTURE(SdPNGExportTest, testTdf155048)
|
|||
}
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdPNGExportTest, testNoAntiAliasExport)
|
||||
{
|
||||
#ifdef MACOSX
|
||||
// See comment in testTdf155048
|
||||
#else
|
||||
loadFromFile(u"svg/tdf162259.svg");
|
||||
|
||||
auto xGraphicExporter = drawing::GraphicExportFilter::create(getComponentContext());
|
||||
CPPUNIT_ASSERT(xGraphicExporter);
|
||||
|
||||
auto xSupplier = mxComponent.queryThrow<css::drawing::XDrawPagesSupplier>();
|
||||
auto xPage = xSupplier->getDrawPages()->getByIndex(0).queryThrow<css::lang::XComponent>();
|
||||
xGraphicExporter->setSourceDocument(xPage);
|
||||
|
||||
// 101 x 151 is current width x height ratio of the loaded SVG. FIXME: it should be 100 x 150.
|
||||
css::uno::Sequence<css::beans::PropertyValue> aFilterData{
|
||||
comphelper::makePropertyValue(u"PixelWidth"_ustr, sal_Int32(101)),
|
||||
comphelper::makePropertyValue(u"PixelHeight"_ustr, sal_Int32(151)),
|
||||
comphelper::makePropertyValue(u"AntiAliasing"_ustr, false),
|
||||
};
|
||||
|
||||
css::uno::Sequence<css::beans::PropertyValue> aDescriptor{
|
||||
comphelper::makePropertyValue(u"URL"_ustr, maTempFile.GetURL()),
|
||||
comphelper::makePropertyValue(u"FilterName"_ustr, u"PNG"_ustr),
|
||||
comphelper::makePropertyValue(u"FilterData"_ustr, aFilterData)
|
||||
};
|
||||
|
||||
xGraphicExporter->filter(aDescriptor);
|
||||
BitmapEx bmp = vcl::PngImageReader(*maTempFile.GetStream(StreamMode::READ)).read();
|
||||
|
||||
std::set<Color> colors;
|
||||
|
||||
for (tools::Long x = 0; x < bmp.GetSizePixel().Width(); ++x)
|
||||
for (tools::Long y = 0; y < bmp.GetSizePixel().Height(); ++y)
|
||||
colors.insert(bmp.GetPixelColor(x, y));
|
||||
|
||||
// With AntiAliasing = false, the text must be rendered aliased
|
||||
CPPUNIT_ASSERT_EQUAL(size_t(2), colors.size());
|
||||
#endif
|
||||
}
|
||||
|
||||
CPPUNIT_TEST_FIXTURE(SdPNGExportTest, testTdf162259)
|
||||
{
|
||||
// The top X in the SVG, having no skew, used a fast rendering path, and was output much wider
|
||||
|
|
|
@ -372,7 +372,7 @@ public:
|
|||
void ImplUpdateSysColorEntries();
|
||||
int ImplIsSysColorEntry( Color nColor );
|
||||
void ImplGetLogFontFromFontSelect( const vcl::font::FontSelectPattern&,
|
||||
const vcl::font::PhysicalFontFace*, LOGFONTW& );
|
||||
const vcl::font::PhysicalFontFace*, LOGFONTW&, bool bAntiAliased);
|
||||
|
||||
#define MAX_64KSALPOINTS ((((sal_uInt16)0xFFFF)-8)/sizeof(POINTS))
|
||||
|
||||
|
|
|
@ -676,7 +676,7 @@ static int CALLBACK SalEnumQueryFontProcExW( const LOGFONTW*, const TEXTMETRICW*
|
|||
|
||||
void ImplGetLogFontFromFontSelect( const vcl::font::FontSelectPattern& rFont,
|
||||
const vcl::font::PhysicalFontFace* pFontFace,
|
||||
LOGFONTW& rLogFont )
|
||||
LOGFONTW& rLogFont, bool bAntiAliased)
|
||||
{
|
||||
OUString aName;
|
||||
if (pFontFace)
|
||||
|
@ -712,7 +712,6 @@ void ImplGetLogFontFromFontSelect( const vcl::font::FontSelectPattern& rFont,
|
|||
rLogFont.lfEscapement = rFont.mnOrientation.get();
|
||||
rLogFont.lfOrientation = rLogFont.lfEscapement;
|
||||
rLogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
|
||||
rLogFont.lfQuality = DEFAULT_QUALITY;
|
||||
rLogFont.lfOutPrecision = OUT_TT_PRECIS;
|
||||
if ( rFont.mnOrientation )
|
||||
rLogFont.lfClipPrecision |= CLIP_LH_ANGLES;
|
||||
|
@ -720,7 +719,10 @@ void ImplGetLogFontFromFontSelect( const vcl::font::FontSelectPattern& rFont,
|
|||
// disable antialiasing if requested
|
||||
if ( rFont.mbNonAntialiased )
|
||||
rLogFont.lfQuality = NONANTIALIASED_QUALITY;
|
||||
|
||||
else if (bAntiAliased || Application::GetSettings().GetStyleSettings().GetUseFontAAFromSystem())
|
||||
rLogFont.lfQuality = DEFAULT_QUALITY;
|
||||
else
|
||||
rLogFont.lfQuality = NONANTIALIASED_QUALITY;
|
||||
}
|
||||
|
||||
std::tuple<HFONT,bool,sal_Int32> WinSalGraphics::ImplDoSetFont(HDC hDC, vcl::font::FontSelectPattern const & i_rFont,
|
||||
|
@ -730,7 +732,7 @@ std::tuple<HFONT,bool,sal_Int32> WinSalGraphics::ImplDoSetFont(HDC hDC, vcl::fon
|
|||
HFONT hNewFont = nullptr;
|
||||
|
||||
LOGFONTW aLogFont;
|
||||
ImplGetLogFontFromFontSelect( i_rFont, i_pFontFace, aLogFont );
|
||||
ImplGetLogFontFromFontSelect( i_rFont, i_pFontFace, aLogFont, getAntiAlias());
|
||||
|
||||
bool bIsCJKVerticalFont = false;
|
||||
// select vertical mode for printing if requested and available
|
||||
|
|
|
@ -2265,7 +2265,7 @@ static void ImplSalFrameSetInputContext( HWND hWnd, const SalInputContext* pCont
|
|||
{
|
||||
LOGFONTW aLogFont;
|
||||
ImplGetLogFontFromFontSelect(pContext->mpFont->GetFontSelectPattern(),
|
||||
nullptr, aLogFont);
|
||||
nullptr, aLogFont, true);
|
||||
ImmSetCompositionFontW( hIMC, &aLogFont );
|
||||
ImmReleaseContext( pFrame->mhWnd, hIMC );
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue