24#include <com/sun/star/rendering/PanoseProportion.hpp>
27#include <rtl/math.hxx>
40 const uno::Sequence< beans::PropertyValue >& rExtraFontProperties,
41 const geometry::Matrix2D& rFontMatrix,
42 rendering::XGraphicDevice& rDevice,
45 maFont(
vcl::
Font( rFontRequest.FontDescription.FamilyName,
46 rFontRequest.FontDescription.StyleName,
48 maFontRequest( rFontRequest ),
49 mpRefDevice( &rDevice ),
50 mpOutDevProvider( rOutDevProvider )
52 maFont->SetAlignment( ALIGN_BASELINE );
53 maFont->SetCharSet( (rFontRequest.FontDescription.IsSymbolFont==css::util::TriState_YES) ? RTL_TEXTENCODING_SYMBOL : RTL_TEXTENCODING_UNICODE );
54 maFont->SetVertical( rFontRequest.FontDescription.IsVertical==css::util::TriState_YES );
57 maFont->SetWeight(
static_cast<FontWeight>(rFontRequest.FontDescription.FontDescription.Weight) );
58 maFont->SetItalic( (rFontRequest.FontDescription.FontDescription.Letterform<=8) ? ITALIC_NONE : ITALIC_NORMAL );
60 rFontRequest.FontDescription.FontDescription.Proportion == rendering::PanoseProportion::MONO_SPACED
61 ? PITCH_FIXED : PITCH_VARIABLE);
66 if( !::rtl::math::approxEqual( rFontMatrix.m00, rFontMatrix.m11) )
70 const bool bOldMapState( rOutDev.IsMapModeEnabled() );
71 rOutDev.EnableMapMode(
false);
73 const Size aSize = rOutDev.GetFontMetric( *maFont ).GetFontSize();
75 const double fDividend( rFontMatrix.m10 + rFontMatrix.m11 );
76 double fStretch = rFontMatrix.m00 + rFontMatrix.m01;
78 if( !::basegfx::fTools::equalZero( fDividend) )
79 fStretch /= fDividend;
81 const ::tools::Long nNewWidth = ::basegfx::fround( aSize.
Width() * fStretch );
83 maFont->SetAverageFontWidth( nNewWidth );
85 rOutDev.EnableMapMode(bOldMapState);
88 sal_uInt32 nEmphasisMark = 0;
96 void SAL_CALL CanvasFont::disposing()
100 mpOutDevProvider.reset();
104 uno::Reference< rendering::XTextLayout > SAL_CALL CanvasFont::createTextLayout(
const rendering::StringContext& aText,
sal_Int8 nDirection, sal_Int64 )
108 if( !mpRefDevice.is() )
109 return uno::Reference< rendering::XTextLayout >();
118 rendering::FontRequest SAL_CALL CanvasFont::getFontRequest( )
122 return maFontRequest;
125 rendering::FontMetrics SAL_CALL CanvasFont::getFontMetrics( )
131 pVDev->SetFont(getVCLFont());
132 const ::FontMetric& aMetric( pVDev->GetFontMetric() );
134 return rendering::FontMetrics(
136 aMetric.GetDescent(),
137 aMetric.GetInternalLeading(),
138 aMetric.GetExternalLeading(),
140 aMetric.GetDescent() / 2.0,
141 aMetric.GetAscent() / 2.0);
144 uno::Sequence< double > SAL_CALL CanvasFont::getAvailableSizes( )
147 return uno::Sequence< double >();
150 uno::Sequence< beans::PropertyValue > SAL_CALL CanvasFont::getExtraFontProperties( )
153 return uno::Sequence< beans::PropertyValue >();
156 OUString SAL_CALL CanvasFont::getImplementationName()
158 return "VCLCanvas::CanvasFont";
161 sal_Bool SAL_CALL CanvasFont::supportsService(
const OUString& ServiceName )
166 uno::Sequence< OUString > SAL_CALL CanvasFont::getSupportedServiceNames()
168 return {
"com.sun.star.rendering.CanvasFont" };
static LanguageType convertToLanguageType(const css::lang::Locale &rLocale, bool bResolveSystem=true)
constexpr tools::Long Width() const
CanvasFont(const CanvasFont &)=delete
make noncopyable
B2IRange fround(const B2DRange &rRange)
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
std::shared_ptr< OutDevProvider > OutDevProviderSharedPtr
::cppu::WeakComponentImplHelper< css::rendering::XCanvasFont, css::lang::XServiceInfo > CanvasFont_Base