28#include <com/sun/star/util/MeasureUnit.hpp>
29#include <com/sun/star/awt/XBitmap.hpp>
30#include <com/sun/star/awt/XWindow.hpp>
31#include <com/sun/star/awt/XDevice.hpp>
32#include <com/sun/star/awt/SimpleFontMetric.hpp>
33#include <com/sun/star/awt/FontDescriptor.hpp>
34#include <com/sun/star/awt/XControlContainer.hpp>
35#include <com/sun/star/awt/KeyModifier.hpp>
36#include <com/sun/star/awt/MouseButton.hpp>
37#include <com/sun/star/embed/EmbedMapUnits.hpp>
38#include <com/sun/star/graphic/XGraphic.hpp>
50#include <com/sun/star/awt/Toolkit.hpp>
51#include <com/sun/star/awt/Size.hpp>
52#include <com/sun/star/awt/Point.hpp>
59 uno::Reference< uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
60 uno::Reference< awt::XToolkit> xToolkit( awt::Toolkit::create(xContext), uno::UNO_QUERY_THROW );
68 css::uno::Reference< css::graphic::XGraphic > xGraphic( rxBitmap, css::uno::UNO_QUERY );
74 else if ( rxBitmap.is() )
83 css::uno::Sequence<sal_Int8> aBytes = rxBitmap->getDIB();
84 SvMemoryStream aMem( aBytes.getArray(), aBytes.getLength(), StreamMode::READ );
88 css::uno::Sequence<sal_Int8> aBytes = rxBitmap->getMaskDIB();
89 SvMemoryStream aMem( aBytes.getArray(), aBytes.getLength(), StreamMode::READ );
102 css::uno::Reference< css::awt::XBitmap> xBmp( aGraphic.
GetXGraphic(), css::uno::UNO_QUERY );
109 return pVCLXWindow ? pVCLXWindow->
GetWindow() :
nullptr;
115 return pVCLXWindow ? pVCLXWindow->
GetWindow() :
nullptr;
121 return pVCLXWindow ? pVCLXWindow->
GetWindow() :
nullptr;
132 const css::uno::Sequence< css::awt::Rectangle > aRects = rxRegion->getRectangles();
133 for (
const auto& rRect : aRects )
141 css::uno::Reference< css::awt::XWindow > xWin;
145 xWin.set(xPeer, css::uno::UNO_QUERY);
169 const css::uno::Sequence< sal_Int32 >& DataY )
171 sal_Int32 nLen = DataX.getLength();
172 const sal_Int32* pDataX = DataX.getConstArray();
173 const sal_Int32* pDataY = DataY.getConstArray();
175 for ( sal_Int32
n = 0;
n < nLen;
n++ )
178 aPnt.
setX( pDataX[
n] );
179 aPnt.
setY( pDataY[
n] );
190 pContainer->setModel( pContainerModel );
197 css::awt::FontDescriptor aFD;
202 aFD.Family = sal::static_int_cast< sal_Int16 >(rFont.
GetFamilyType());
204 aFD.Pitch = sal::static_int_cast< sal_Int16 >(rFont.
GetPitch());
208 aFD.Underline = sal::static_int_cast< sal_Int16 >(rFont.
GetUnderline());
209 aFD.Strikeout = sal::static_int_cast< sal_Int16 >(rFont.
GetStrikeout());
220 if ( !rDescr.Name.isEmpty() )
222 if ( !rDescr.StyleName.isEmpty() )
228 if (
static_cast<rtl_TextEncoding
>(rDescr.CharSet) != RTL_TEXTENCODING_DONTKNOW )
229 aFont.
SetCharSet(
static_cast<rtl_TextEncoding
>(rDescr.CharSet) );
232 if ( rDescr.CharacterWidth )
236 if ( rDescr.Slant != css::awt::FontSlant_DONTKNOW )
263 css::awt::SimpleFontMetric aFM;
264 aFM.Ascent =
static_cast<sal_Int16
>(rFontMetric.
GetAscent());
265 aFM.Descent =
static_cast<sal_Int16
>(rFontMetric.
GetDescent());
267 aFM.Slant =
static_cast<sal_Int16
>(rFontMetric.
GetSlant());
268 aFM.FirstChar = 0x0020;
269 aFM.LastChar = 0xFFFD;
275 return ( !rRect.X && !rRect.Y && !rRect.Width && !rRect.Height );
280 switch( nUnoEmbedMapUnit )
282 case css::embed::EmbedMapUnits::ONE_100TH_MM:
283 return MapUnit::Map100thMM;
284 case css::embed::EmbedMapUnits::ONE_10TH_MM:
285 return MapUnit::Map10thMM;
286 case css::embed::EmbedMapUnits::ONE_MM:
287 return MapUnit::MapMM;
288 case css::embed::EmbedMapUnits::ONE_CM:
289 return MapUnit::MapCM;
290 case css::embed::EmbedMapUnits::ONE_1000TH_INCH:
291 return MapUnit::Map1000thInch;
292 case css::embed::EmbedMapUnits::ONE_100TH_INCH:
293 return MapUnit::Map100thInch;
294 case css::embed::EmbedMapUnits::ONE_10TH_INCH:
295 return MapUnit::Map10thInch;
296 case css::embed::EmbedMapUnits::ONE_INCH:
297 return MapUnit::MapInch;
298 case css::embed::EmbedMapUnits::POINT:
299 return MapUnit::MapPoint;
300 case css::embed::EmbedMapUnits::TWIP:
301 return MapUnit::MapTwip;
302 case css::embed::EmbedMapUnits::PIXEL:
303 return MapUnit::MapPixel;
306 OSL_FAIL(
"Unexpected UNO map mode is provided!" );
307 return MapUnit::LASTENUMDUMMY;
312 switch( nVCLMapUnit )
314 case MapUnit::Map100thMM:
315 return css::embed::EmbedMapUnits::ONE_100TH_MM;
316 case MapUnit::Map10thMM:
317 return css::embed::EmbedMapUnits::ONE_10TH_MM;
319 return css::embed::EmbedMapUnits::ONE_MM;
321 return css::embed::EmbedMapUnits::ONE_CM;
322 case MapUnit::Map1000thInch:
323 return css::embed::EmbedMapUnits::ONE_1000TH_INCH;
324 case MapUnit::Map100thInch:
325 return css::embed::EmbedMapUnits::ONE_100TH_INCH;
326 case MapUnit::Map10thInch:
327 return css::embed::EmbedMapUnits::ONE_10TH_INCH;
328 case MapUnit::MapInch:
329 return css::embed::EmbedMapUnits::ONE_INCH;
330 case MapUnit::MapPoint:
331 return css::embed::EmbedMapUnits::POINT;
332 case MapUnit::MapTwip:
333 return css::embed::EmbedMapUnits::TWIP;
334 case MapUnit::MapPixel:
335 return css::embed::EmbedMapUnits::PIXEL;
339 OSL_FAIL(
"Unexpected VCL map mode is provided!" );
348 enum UnitConversionDirection
350 FieldUnitToMeasurementUnit,
351 MeasurementUnitToFieldUnit
354 sal_Int16 convertMeasurementUnit( sal_Int16 _nUnit, UnitConversionDirection eDirection, sal_Int16& _rFieldToUNOValueFactor )
356 static struct _unit_table
359 sal_Int16 nMeasurementUnit;
360 sal_Int16 nFieldToMeasureFactor;
362 { FieldUnit::NONE, -1 , -1},
363 { FieldUnit::MM, MeasureUnit::MM, 1 },
364 { FieldUnit::MM, MeasureUnit::MM_10TH, 10 },
365 { FieldUnit::MM_100TH, MeasureUnit::MM_100TH, 1 },
366 { FieldUnit::CM, MeasureUnit::CM, 1 },
367 { FieldUnit::M, MeasureUnit::M, 1 },
368 { FieldUnit::KM, MeasureUnit::KM, 1 },
369 { FieldUnit::TWIP, MeasureUnit::TWIP, 1 },
370 { FieldUnit::POINT, MeasureUnit::POINT, 1 },
371 { FieldUnit::PICA, MeasureUnit::PICA, 1 },
372 { FieldUnit::INCH, MeasureUnit::INCH, 1 },
373 { FieldUnit::INCH, MeasureUnit::INCH_10TH, 10 },
374 { FieldUnit::INCH, MeasureUnit::INCH_100TH, 100 },
375 { FieldUnit::INCH, MeasureUnit::INCH_1000TH, 1000 },
376 { FieldUnit::FOOT, MeasureUnit::FOOT, 1 },
377 { FieldUnit::MILE, MeasureUnit::MILE, 1 },
379 for (
auto & aUnit : aUnits)
381 if ( eDirection == FieldUnitToMeasurementUnit )
383 if ( ( aUnit.eFieldUnit ==
static_cast<FieldUnit>(_nUnit) ) && ( aUnit.nFieldToMeasureFactor == _rFieldToUNOValueFactor ) )
384 return aUnit.nMeasurementUnit;
388 if ( aUnit.nMeasurementUnit == _nUnit )
390 _rFieldToUNOValueFactor = aUnit.nFieldToMeasureFactor;
391 return static_cast<sal_Int16
>(aUnit.eFieldUnit);
395 if ( eDirection == FieldUnitToMeasurementUnit )
398 _rFieldToUNOValueFactor = 1;
399 return sal_Int16(FieldUnit::NONE);
408 return convertMeasurementUnit(
static_cast<sal_Int16
>(_nFieldUnit), FieldUnitToMeasurementUnit, _nUNOToFieldValueFactor );
414 return static_cast<FieldUnit>(convertMeasurementUnit( _nMeasurementUnit, MeasurementUnitToFieldUnit, _rFieldToUNOValueFactor ));
421 switch(_nMeasureUnit)
423 case css::util::MeasureUnit::MM_100TH:
424 eMode = MapUnit::Map100thMM;
427 case css::util::MeasureUnit::MM_10TH:
428 eMode = MapUnit::Map10thMM;
431 case css::util::MeasureUnit::MM:
432 eMode = MapUnit::MapMM;
435 case css::util::MeasureUnit::CM:
436 eMode = MapUnit::MapCM;
439 case css::util::MeasureUnit::INCH_1000TH:
440 eMode = MapUnit::Map1000thInch;
443 case css::util::MeasureUnit::INCH_100TH:
444 eMode = MapUnit::Map100thInch;
447 case css::util::MeasureUnit::INCH_10TH:
448 eMode = MapUnit::Map10thInch;
451 case css::util::MeasureUnit::INCH:
452 eMode = MapUnit::MapInch;
455 case css::util::MeasureUnit::POINT:
456 eMode = MapUnit::MapPoint;
459 case css::util::MeasureUnit::TWIP:
460 eMode = MapUnit::MapTwip;
463 case css::util::MeasureUnit::PIXEL:
464 eMode = MapUnit::MapPixel;
467 case css::util::MeasureUnit::APPFONT:
468 eMode = MapUnit::MapAppFont;
471 case css::util::MeasureUnit::SYSFONT:
472 eMode = MapUnit::MapSysFont;
476 throw css::lang::IllegalArgumentException(
"Unsupported measure unit.",
nullptr, 1 );
483 ::Size aVCLSize(_aSize.Width, _aSize.Height);
489 css::awt::Size aAWTSize(_aSize.
Width(), _aSize.
Height());
496 ::Point aVCLPoint(_aPoint.X, _aPoint.Y);
502 css::awt::Point aAWTPoint(_aPoint.
X(), _aPoint.
Y());
508 return ::tools::Rectangle( _rRect.X, _rRect.Y, _rRect.X + _rRect.Width - 1, _rRect.Y + _rRect.Height - 1 );
518 awt::MouseEvent aMouseEvent;
519 aMouseEvent.Source = _rxContext;
521 aMouseEvent.Modifiers = 0;
522 if ( _rVclEvent.IsShift() )
523 aMouseEvent.Modifiers |= css::awt::KeyModifier::SHIFT;
524 if ( _rVclEvent.IsMod1() )
525 aMouseEvent.Modifiers |= css::awt::KeyModifier::MOD1;
526 if ( _rVclEvent.IsMod2() )
527 aMouseEvent.Modifiers |= css::awt::KeyModifier::MOD2;
529 aMouseEvent.Buttons = 0;
530 if ( _rVclEvent.IsLeft() )
531 aMouseEvent.Buttons |= css::awt::MouseButton::LEFT;
532 if ( _rVclEvent.IsRight() )
533 aMouseEvent.Buttons |= css::awt::MouseButton::RIGHT;
534 if ( _rVclEvent.IsMiddle() )
535 aMouseEvent.Buttons |= css::awt::MouseButton::MIDDLE;
537 aMouseEvent.X = _rVclEvent.GetPosPixel().X();
538 aMouseEvent.Y = _rVclEvent.GetPosPixel().Y();
539 aMouseEvent.ClickCount = _rVclEvent.GetClicks();
540 aMouseEvent.PopupTrigger =
false;
547 ::MouseEvent aMouseEvent(
Point( _rAwtEvent.X, _rAwtEvent.Y ), _rAwtEvent.ClickCount,
548 ::MouseEventModifiers::NONE, _rAwtEvent.Buttons, _rAwtEvent.Modifiers );
555 awt::KeyEvent aKeyEvent;
556 aKeyEvent.Source = _rxContext;
558 aKeyEvent.Modifiers = 0;
559 if ( _rVclEvent.GetKeyCode().IsShift() )
560 aKeyEvent.Modifiers |= awt::KeyModifier::SHIFT;
561 if ( _rVclEvent.GetKeyCode().IsMod1() )
562 aKeyEvent.Modifiers |= awt::KeyModifier::MOD1;
563 if ( _rVclEvent.GetKeyCode().IsMod2() )
564 aKeyEvent.Modifiers |= awt::KeyModifier::MOD2;
565 if ( _rVclEvent.GetKeyCode().IsMod3() )
566 aKeyEvent.Modifiers |= awt::KeyModifier::MOD3;
568 aKeyEvent.KeyCode = _rVclEvent.GetKeyCode().GetCode();
569 aKeyEvent.KeyChar = _rVclEvent.GetCharCode();
570 aKeyEvent.KeyFunc = ::sal::static_int_cast< sal_Int16 >( _rVclEvent.GetKeyCode().GetFunction());
578 vcl::KeyCode aKeyCode( _rAwtEvent.KeyCode, _rAwtEvent.Modifiers & awt::KeyModifier::SHIFT,
579 _rAwtEvent.Modifiers & awt::KeyModifier::MOD1,
580 _rAwtEvent.Modifiers & awt::KeyModifier::MOD2,
581 _rAwtEvent.Modifiers & awt::KeyModifier::MOD3 );
583 return ::KeyEvent (nChar, aKeyCode);
592 eType = pWindow->GetPointer();
601 pWindow->SetPointer(ePointer);
tools::Long GetDescent() const
tools::Long GetAscent() const
tools::Long GetInternalLeading() const
tools::Long GetSlant() const
css::uno::Reference< css::graphic::XGraphic > GetXGraphic() const
BitmapEx GetBitmapEx(const GraphicConversionParameters &rParameters=GraphicConversionParameters()) const
constexpr tools::Long Y() const
void setX(tools::Long nX)
void setY(tools::Long nY)
constexpr tools::Long X() const
constexpr tools::Long Height() const
constexpr tools::Long Width() const
::KeyEvent createVCLKeyEvent(const css::awt::KeyEvent &_rAwtEvent)
static css::awt::SimpleFontMetric CreateFontMetric(const FontMetric &rFontMetric)
static css::uno::Reference< css::awt::XToolkit > CreateToolkit()
static MapUnit UnoEmbed2VCLMapUnit(sal_Int32 nUnoEmbedMapUnit)
static css::awt::Rectangle ConvertToAWTRect(::tools::Rectangle const &_rRect)
static css::awt::FontDescriptor CreateFontDescriptor(const vcl::Font &rFont)
convert Font to css::awt::FontDescriptor
static sal_Int16 ConvertToMeasurementUnit(FieldUnit _nFieldUnit, sal_Int16 _rFieldToUNOValueFactor)
small helper to convert between MeasurementUnit and FieldUnit
static css::awt::KeyEvent createKeyEvent(const ::KeyEvent &_rVclEvent, const css::uno::Reference< css::uno::XInterface > &_rxContext)
::PointerStyle getMousePointer(const css::uno::Reference< css::awt::XWindowPeer > &rWindowPeer)
static OutputDevice * GetOutputDevice(const css::uno::Reference< css::awt::XDevice > &rxDevice)
static sal_Int32 VCL2UnoEmbedMapUnit(MapUnit nVCLMapUnit)
static void setMousePointer(const css::uno::Reference< css::awt::XWindowPeer > &rWindowPeer, ::PointerStyle mousepointer)
static vcl::Region GetRegion(const css::uno::Reference< css::awt::XRegion > &rxRegion)
static css::uno::Reference< css::awt::XWindow > GetInterface(vcl::Window *pWindow)
static BitmapEx GetBitmap(const css::uno::Reference< css::awt::XBitmap > &rxBitmap)
static css::uno::Reference< css::awt::XControlContainer > CreateControlContainer(vcl::Window *pWindow)
static css::awt::Size ConvertToAWTSize(::Size const &_aSize)
static css::awt::Point ConvertToAWTPoint(::Point const &_aPoint)
static MapUnit ConvertToMapModeUnit(sal_Int16 _nMeasureUnit)
static css::uno::Reference< css::awt::XBitmap > CreateBitmap(const BitmapEx &rBitmap)
static tools::Polygon CreatePolygon(const css::uno::Sequence< sal_Int32 > &DataX, const css::uno::Sequence< sal_Int32 > &DataY)
static css::awt::MouseEvent createMouseEvent(const ::MouseEvent &_rVclEvent, const css::uno::Reference< css::uno::XInterface > &_rxContext)
static FieldUnit ConvertToFieldUnit(sal_Int16 _nMeasurementUnit, sal_Int16 &_rFieldToUNOValueFactor)
::Size ConvertToVCLSize(css::awt::Size const &_aSize)
::tools::Rectangle ConvertToVCLRect(css::awt::Rectangle const &_rRect)
static bool IsZero(const css::awt::Rectangle &rRect)
::Point ConvertToVCLPoint(css::awt::Point const &_aPoint)
static vcl::Font CreateFont(const css::awt::FontDescriptor &rDescr, const vcl::Font &rInitFont)
::MouseEvent createVCLMouseEvent(const css::awt::MouseEvent &_rAwtEvent)
static vcl::Window * GetWindow(const css::uno::Reference< css::awt::XWindow > &rxWindow)
const BitmapEx & GetBitmap() const
A UNO wrapper for the VCL OutputDevice.
const VclPtr< OutputDevice > & GetOutputDevice() const
const vcl::Font & GetFont() const
OutputDevice * GetOutputDevice() const
const vcl::Region & GetRegion() const
vcl::Window * GetWindow() const
void SetFontSize(const Size &)
void SetOrientation(Degree10 nLineOrientation)
FontFamily GetFamilyType()
void SetWidthType(FontWidth)
void SetStyleName(const OUString &rStyleName)
void SetWordLineMode(bool bWordLine)
void SetPitch(FontPitch ePitch)
const OUString & GetStyleName() const
FontStrikeout GetStrikeout() const
void SetItalic(FontItalic)
void SetWeight(FontWeight)
const OUString & GetFamilyName() const
void SetFamily(FontFamily)
void SetUnderline(FontLineStyle)
void SetCharSet(rtl_TextEncoding)
const Size & GetFontSize() const
void SetKerning(FontKerning nKerning)
void SetFamilyName(const OUString &rFamilyName)
FontLineStyle GetUnderline() const
rtl_TextEncoding GetCharSet() const
bool IsWordLineMode() const
Degree10 GetOrientation() const
void SetStrikeout(FontStrikeout)
void Union(const tools::Rectangle &rRegion)
virtual css::uno::Reference< css::awt::XVclWindowPeer > GetComponentInterface(bool bCreate=true)
inline ::tools::Rectangle VCLRectangle(const css::awt::Rectangle &rAWTRect)
VCL_DLLPUBLIC css::awt::FontSlant ConvertFontSlant(FontItalic eWeight)
VCL_DLLPUBLIC float ConvertFontWidth(FontWidth eWidth)
VCL_DLLPUBLIC float ConvertFontWeight(FontWeight eWeight)
UNDERLYING_TYPE get() const