office-gobmx/oox/source/shape/WpsContext.hxx
Regina Henschel cbf30153a5 tdf#125885 Conversion WordArt to Fontwork in docx import
docx has the information, that a shape is a WordArt shape, after the
text content. So in import of such file there is already a frame
attached to the shape, which makes it impossible to set it into text
path mode.

The patch detects that it should be a WordArt shape. It transfers the
text from frame to shape, removes the frame and then sets the shape
into text path mode.

WordArt in OOXML has the same closed set of types as we have for MS
binary import. But MS Word can combine them with arbitrary shapes. The
patch does only convert rectangles.

The text is copied from frame to the shape as string. Thus it looses
all styles. But our Fontwork cannot use different styles for
portions of text, so I think that is acceptable.

Fontwork uses not the styles of the text but styles set at the shape.
The patch copies the styles from the first not empty run. That should
give sufficient results in most cases. These text styles are set at
the shape, which will result in a paragraph style referenced by the
draw:text-style-name attribute of the draw:custom-shape element in ODF.

The patch does not yet include export to docx. The current 'restore
old shape' on resave to docx is lost. ToDo: Patch for export.

Change-Id: I880ee7c7616db50524032e4b1443730a2d0a7361
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143615
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2023-01-02 08:19:37 +00:00

46 lines
1.4 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/.
*/
#ifndef INCLUDED_OOX_SOURCE_SHAPE_WPSCONTEXT_HXX
#define INCLUDED_OOX_SOURCE_SHAPE_WPSCONTEXT_HXX
#include <oox/core/contexthandler2.hxx>
#include <oox/drawingml/shapecontext.hxx>
#include <oox/drawingml/drawingmltypes.hxx>
namespace com::sun::star::drawing
{
class XShape;
}
namespace oox::shape
{
/// Wps is the drawingML equivalent of v:shape.
class WpsContext final : public oox::drawingml::ShapeContext
{
public:
WpsContext(oox::core::ContextHandler2Helper const& rParent,
css::uno::Reference<css::drawing::XShape> xShape,
oox::drawingml::ShapePtr const& pMasterShapePtr,
oox::drawingml::ShapePtr const& pShapePtr);
~WpsContext() override;
oox::core::ContextHandlerRef onCreateContext(sal_Int32 nElementToken,
const oox::AttributeList& rAttribs) override;
virtual void onEndElement() override;
private:
css::uno::Reference<css::drawing::XShape> mxShape;
bool m_bHasWPGParent;
};
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */