83535a28c5
First steps to organize an importer that can read/interpret wmf/emf/emf+ and deliver a primitive representation for the content by parsing it. Use the same mechanisms as already applied for Svg, so to reuse abilities to keep original binary data to allow save again and embedding in files and have an implemented replacement bitmap based representation. For this, unify the used helper classes to handle more than just Svg. For 1st try, add test code and static bool switches Change-Id: I6e0a82943541d811a8f8d65a84115569fcd8cee7
217 lines
7.7 KiB
C++
217 lines
7.7 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
*/
|
|
|
|
#ifndef INCLUDED_SVX_SVDOGRAF_HXX
|
|
#define INCLUDED_SVX_SVDOGRAF_HXX
|
|
|
|
#include <com/sun/star/io/XInputStream.hpp>
|
|
#include <vcl/graph.hxx>
|
|
#include <svx/svdorect.hxx>
|
|
#include <svtools/grfmgr.hxx>
|
|
#include <svx/svxdllapi.h>
|
|
#include <o3tl/typed_flags_set.hxx>
|
|
|
|
namespace sdr
|
|
{
|
|
namespace properties
|
|
{
|
|
class GraphicProperties;
|
|
} // end of namespace properties
|
|
namespace contact
|
|
{
|
|
class ViewObjectContactOfGraphic;
|
|
} // end of namespace contact
|
|
} // end of namespace sdr
|
|
|
|
/**
|
|
* Options for GetTransformedGraphic()
|
|
*/
|
|
enum class SdrGrafObjTransformsAttrs
|
|
{
|
|
NONE = 0x00,
|
|
COLOR = 0x01,
|
|
MIRROR = 0x02,
|
|
ROTATE = 0x04,
|
|
ALL = 0x07,
|
|
};
|
|
namespace o3tl
|
|
{
|
|
template<> struct typed_flags<SdrGrafObjTransformsAttrs> : is_typed_flags<SdrGrafObjTransformsAttrs, 7> {};
|
|
}
|
|
|
|
class SdrGrafObjGeoData : public SdrTextObjGeoData
|
|
{
|
|
public:
|
|
bool bMirrored;
|
|
|
|
SdrGrafObjGeoData()
|
|
: bMirrored(false)
|
|
{
|
|
}
|
|
};
|
|
|
|
class GraphicObject;
|
|
class SdrGraphicLink;
|
|
|
|
/**
|
|
* This class represents an embedded or linked bitmap graphic object.
|
|
*/
|
|
class SVX_DLLPUBLIC SdrGrafObj : public SdrRectObj
|
|
{
|
|
private:
|
|
// to allow sdr::properties::GraphicProperties access to SetXPolyDirty()
|
|
friend class sdr::properties::GraphicProperties;
|
|
|
|
// to allow sdr::contact::ViewObjectContactOfGraphic access to ImpUpdateGraphicLink()
|
|
friend class sdr::contact::ViewObjectContactOfGraphic;
|
|
friend class SdrExchangeView; // Only for a ForceSwapIn() call.
|
|
friend class SdrGraphicLink;
|
|
|
|
private:
|
|
virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() override;
|
|
virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties() override;
|
|
|
|
void ImpSetAttrToGrafInfo(); // Copy values from the pool
|
|
GraphicAttr aGrafInfo;
|
|
|
|
OUString aFileName; // If it's a Link, the filename can be found in here
|
|
OUString aReferer;
|
|
OUString aFilterName;
|
|
GraphicObject* pGraphic; // In order to speed up output of bitmaps, especially rotated ones
|
|
GraphicObject* mpReplacementGraphic;
|
|
SdrGraphicLink* pGraphicLink; // And here a pointer for linked graphics
|
|
bool bMirrored:1; // True: the graphic is horizontal, which means it's mirrored along the y-axis
|
|
|
|
// Flag for allowing text animation. Default is true.
|
|
bool mbGrafAnimationAllowed:1;
|
|
|
|
// #i25616#
|
|
bool mbInsidePaint:1;
|
|
bool mbIsPreview:1;
|
|
|
|
private:
|
|
|
|
void ImpRegisterLink();
|
|
void ImpDeregisterLink();
|
|
bool ImpUpdateGraphicLink( bool bAsynchron = true ) const;
|
|
void ImpSetLinkedGraphic( const Graphic& rGraphic );
|
|
DECL_LINK( ImpSwapHdl, const GraphicObject*, SvStream* );
|
|
DECL_LINK( ReplacementSwapHdl, const GraphicObject*, SvStream* );
|
|
void onGraphicChanged();
|
|
GDIMetaFile GetMetaFile(GraphicType &rGraphicType) const;
|
|
|
|
public:
|
|
|
|
SdrGrafObj();
|
|
SdrGrafObj(const Graphic& rGrf);
|
|
SdrGrafObj(const Graphic& rGrf, const tools::Rectangle& rRect);
|
|
virtual ~SdrGrafObj() override;
|
|
|
|
void SetGraphicObject( const GraphicObject& rGrfObj );
|
|
const GraphicObject& GetGraphicObject(bool bForceSwapIn = false) const;
|
|
const GraphicObject* GetReplacementGraphicObject() const;
|
|
|
|
void NbcSetGraphic(const Graphic& rGrf);
|
|
void SetGraphic(const Graphic& rGrf);
|
|
const Graphic& GetGraphic() const;
|
|
|
|
Graphic GetTransformedGraphic( SdrGrafObjTransformsAttrs nTransformFlags = SdrGrafObjTransformsAttrs::ALL ) const;
|
|
|
|
GraphicType GetGraphicType() const;
|
|
|
|
GraphicAttr GetGraphicAttr( SdrGrafObjTransformsAttrs nTransformFlags = SdrGrafObjTransformsAttrs::ALL ) const;
|
|
|
|
// Keep ATM for SD.
|
|
bool IsAnimated() const;
|
|
bool IsEPS() const;
|
|
bool IsSwappedOut() const;
|
|
|
|
const MapMode& GetGrafPrefMapMode() const;
|
|
const Size& GetGrafPrefSize() const;
|
|
|
|
void SetGrafStreamURL( const OUString& rGraphicStreamURL );
|
|
OUString GetGrafStreamURL() const;
|
|
Size getOriginalSize() const;
|
|
|
|
private:
|
|
void ForceSwapIn() const;
|
|
|
|
public:
|
|
void SetGraphicLink(const OUString& rFileName, const OUString& rReferer, const OUString& rFilterName);
|
|
void ReleaseGraphicLink();
|
|
bool IsLinkedGraphic() const;
|
|
|
|
const OUString& GetFileName() const { return aFileName;}
|
|
const OUString& GetFilterName() const { return aFilterName;}
|
|
|
|
void StartAnimation();
|
|
|
|
virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
|
|
virtual sal_uInt16 GetObjIdentifier() const override;
|
|
|
|
virtual OUString TakeObjNameSingul() const override;
|
|
virtual OUString TakeObjNamePlural() const override;
|
|
|
|
// #i25616#
|
|
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
|
|
|
|
virtual SdrGrafObj* Clone() const override;
|
|
SdrGrafObj& operator=(const SdrGrafObj& rObj);
|
|
|
|
virtual sal_uInt32 GetHdlCount() const override;
|
|
virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const override;
|
|
|
|
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
|
|
virtual void NbcMirror(const Point& rRef1, const Point& rRef2) override;
|
|
virtual SdrObjGeoData* NewGeoData() const override;
|
|
virtual void SaveGeoData(SdrObjGeoData& rGeo) const override;
|
|
virtual void RestGeoData(const SdrObjGeoData& rGeo) override;
|
|
|
|
bool HasGDIMetaFile() const;
|
|
|
|
virtual void SetPage(SdrPage* pNewPage) override;
|
|
virtual void SetModel(SdrModel* pNewModel) override;
|
|
|
|
bool isEmbeddedVectorGraphicData() const;
|
|
GDIMetaFile getMetafileFromEmbeddedVectorGraphicData() const;
|
|
|
|
virtual SdrObject* DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
|
|
|
|
virtual void AdjustToMaxRect( const tools::Rectangle& rMaxRect, bool bShrinkOnly = false ) override;
|
|
|
|
virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
|
|
|
|
bool IsMirrored() const { return bMirrored;}
|
|
void SetMirrored( bool _bMirrored );
|
|
|
|
// Access to GrafAnimationAllowed flag
|
|
void SetGrafAnimationAllowed(bool bNew);
|
|
|
|
css::uno::Reference< css::io::XInputStream > getInputStream();
|
|
|
|
// #i103116# FullDrag support
|
|
virtual SdrObject* getFullDragClone() const override;
|
|
|
|
// add handles for crop mode when selected
|
|
virtual void addCropHandles(SdrHdlList& rTarget) const override;
|
|
};
|
|
|
|
#endif // INCLUDED_SVX_SVDOGRAF_HXX
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|