office-gobmx/oox/source/drawingml/shape3dproperties.cxx
Noel Grandin 239ceb3155 loplugin:ostr in oox
Change-Id: I08124ce2da1facbe2e84aa4a7a8e25fec24fa962
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167428
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-10 09:51:34 +02:00

390 lines
17 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 .
*/
#include <drawingml/shape3dproperties.hxx>
#include <com/sun/star/drawing/BitmapMode.hpp>
#include <com/sun/star/graphic/XGraphicTransformer.hpp>
#include <comphelper/propertyvalue.hxx>
#include <oox/token/tokens.hxx>
#include <sal/log.hxx>
using namespace ::com::sun::star;
namespace oox::drawingml {
OUString Generic3DProperties::getCameraPrstName( sal_Int32 nElement )
{
switch( nElement )
{
case XML_legacyObliqueTopLeft: return u"legacyObliqueTopLeft"_ustr;
case XML_legacyObliqueTop: return u"legacyObliqueTop"_ustr;
case XML_legacyObliqueTopRight: return u"legacyObliqueTopRight"_ustr;
case XML_legacyObliqueLeft: return u"legacyObliqueLeft"_ustr;
case XML_legacyObliqueFront: return u"legacyObliqueFront"_ustr;
case XML_legacyObliqueRight: return u"legacyObliqueRight"_ustr;
case XML_legacyObliqueBottomLeft: return u"legacyObliqueBottomLeft"_ustr;
case XML_legacyObliqueBottom: return u"legacyObliqueBottom"_ustr;
case XML_legacyObliqueBottomRight: return u"legacyObliqueBottomRight"_ustr;
case XML_legacyPerspectiveTopLeft: return u"legacyPerspectiveTopLeft"_ustr;
case XML_legacyPerspectiveTop: return u"legacyPerspectiveTop"_ustr;
case XML_legacyPerspectiveTopRight: return u"legacyPerspectiveTopRight"_ustr;
case XML_legacyPerspectiveLeft: return u"legacyPerspectiveLeft"_ustr;
case XML_legacyPerspectiveFront: return u"legacyPerspectiveFront"_ustr;
case XML_legacyPerspectiveRight: return u"legacyPerspectiveRight"_ustr;
case XML_legacyPerspectiveBottomLeft: return u"legacyPerspectiveBottomLeft"_ustr;
case XML_legacyPerspectiveBottom: return u"legacyPerspectiveBottom"_ustr;
case XML_legacyPerspectiveBottomRight: return u"legacyPerspectiveBottomRight"_ustr;
case XML_orthographicFront: return u"orthographicFront"_ustr;
case XML_isometricTopUp: return u"isometricTopUp"_ustr;
case XML_isometricTopDown: return u"isometricTopDown"_ustr;
case XML_isometricBottomUp: return u"isometricBottomUp"_ustr;
case XML_isometricBottomDown: return u"isometricBottomDown"_ustr;
case XML_isometricLeftUp: return u"isometricLeftUp"_ustr;
case XML_isometricLeftDown: return u"isometricLeftDown"_ustr;
case XML_isometricRightUp: return u"isometricRightUp"_ustr;
case XML_isometricRightDown: return u"isometricRightDown"_ustr;
case XML_isometricOffAxis1Left: return u"isometricOffAxis1Left"_ustr;
case XML_isometricOffAxis1Right: return u"isometricOffAxis1Right"_ustr;
case XML_isometricOffAxis1Top: return u"isometricOffAxis1Top"_ustr;
case XML_isometricOffAxis2Left: return u"isometricOffAxis2Left"_ustr;
case XML_isometricOffAxis2Right: return u"isometricOffAxis2Right"_ustr;
case XML_isometricOffAxis2Top: return u"isometricOffAxis2Top"_ustr;
case XML_isometricOffAxis3Left: return u"isometricOffAxis3Left"_ustr;
case XML_isometricOffAxis3Right: return u"isometricOffAxis3Right"_ustr;
case XML_isometricOffAxis3Bottom: return u"isometricOffAxis3Bottom"_ustr;
case XML_isometricOffAxis4Left: return u"isometricOffAxis4Left"_ustr;
case XML_isometricOffAxis4Right: return u"isometricOffAxis4Right"_ustr;
case XML_isometricOffAxis4Bottom: return u"isometricOffAxis4Bottom"_ustr;
case XML_obliqueTopLeft: return u"obliqueTopLeft"_ustr;
case XML_obliqueTop: return u"obliqueTop"_ustr;
case XML_obliqueTopRight: return u"obliqueTopRight"_ustr;
case XML_obliqueLeft: return u"obliqueLeft"_ustr;
case XML_obliqueRight: return u"obliqueRight"_ustr;
case XML_obliqueBottomLeft: return u"obliqueBottomLeft"_ustr;
case XML_obliqueBottom: return u"obliqueBottom"_ustr;
case XML_obliqueBottomRight: return u"obliqueBottomRight"_ustr;
case XML_perspectiveFront: return u"perspectiveFront"_ustr;
case XML_perspectiveLeft: return u"perspectiveLeft"_ustr;
case XML_perspectiveRight: return u"perspectiveRight"_ustr;
case XML_perspectiveAbove: return u"perspectiveAbove"_ustr;
case XML_perspectiveBelow: return u"perspectiveBelow"_ustr;
case XML_perspectiveAboveLeftFacing: return u"perspectiveAboveLeftFacing"_ustr;
case XML_perspectiveAboveRightFacing: return u"perspectiveAboveRightFacing"_ustr;
case XML_perspectiveContrastingLeftFacing: return u"perspectiveContrastingLeftFacing"_ustr;
case XML_perspectiveContrastingRightFacing: return u"perspectiveContrastingRightFacing"_ustr;
case XML_perspectiveHeroicLeftFacing: return u"perspectiveHeroicLeftFacing"_ustr;
case XML_perspectiveHeroicRightFacing: return u"perspectiveHeroicRightFacing"_ustr;
case XML_perspectiveHeroicExtremeLeftFacing: return u"perspectiveHeroicExtremeLeftFacing"_ustr;
case XML_perspectiveHeroicExtremeRightFacing: return u"perspectiveHeroicExtremeRightFacing"_ustr;
case XML_perspectiveRelaxed: return u"perspectiveRelaxed"_ustr;
case XML_perspectiveRelaxedModerately: return u"perspectiveRelaxedModerately"_ustr;
}
SAL_WARN( "oox.drawingml", "Generic3DProperties::getCameraPrstName - unexpected prst type" );
return OUString();
}
OUString Generic3DProperties::getLightRigName( sal_Int32 nElement )
{
switch( nElement )
{
case XML_legacyFlat1: return u"legacyFlat1"_ustr;
case XML_legacyFlat2: return u"legacyFlat2"_ustr;
case XML_legacyFlat3: return u"legacyFlat3"_ustr;
case XML_legacyFlat4: return u"legacyFlat4"_ustr;
case XML_legacyNormal1: return u"legacyNormal1"_ustr;
case XML_legacyNormal2: return u"legacyNormal2"_ustr;
case XML_legacyNormal3: return u"legacyNormal3"_ustr;
case XML_legacyNormal4: return u"legacyNormal4"_ustr;
case XML_legacyHarsh1: return u"legacyHarsh1"_ustr;
case XML_legacyHarsh2: return u"legacyHarsh2"_ustr;
case XML_legacyHarsh3: return u"legacyHarsh3"_ustr;
case XML_legacyHarsh4: return u"legacyHarsh4"_ustr;
case XML_threePt: return u"threePt"_ustr;
case XML_balanced: return u"balanced"_ustr;
case XML_soft: return u"soft"_ustr;
case XML_harsh: return u"harsh"_ustr;
case XML_flood: return u"flood"_ustr;
case XML_contrasting: return u"contrasting"_ustr;
case XML_morning: return u"morning"_ustr;
case XML_sunrise: return u"sunrise"_ustr;
case XML_sunset: return u"sunset"_ustr;
case XML_chilly: return u"chilly"_ustr;
case XML_freezing: return u"freezing"_ustr;
case XML_flat: return u"flat"_ustr;
case XML_twoPt: return u"twoPt"_ustr;
case XML_glow: return u"glow"_ustr;
case XML_brightRoom: return u"brightRoom"_ustr;
}
SAL_WARN( "oox.drawingml", "Generic3DProperties::getLightRigName - unexpected token" );
return OUString();
}
OUString Generic3DProperties::getLightRigDirName( sal_Int32 nElement )
{
switch( nElement )
{
case XML_tl: return u"tl"_ustr;
case XML_t: return u"t"_ustr;
case XML_tr: return u"tr"_ustr;
case XML_l: return u"l"_ustr;
case XML_r: return u"r"_ustr;
case XML_bl: return u"bl"_ustr;
case XML_b: return u"b"_ustr;
case XML_br: return u"br"_ustr;
}
SAL_WARN( "oox.drawingml", "Generic3DProperties::getLightRigDirName - unexpected token" );
return OUString();
}
OUString Generic3DProperties::getBevelPresetTypeString( sal_Int32 nType )
{
switch (nType)
{
case XML_relaxedInset: return u"relaxedInset"_ustr;
case XML_circle: return u"circle"_ustr;
case XML_slope: return u"slope"_ustr;
case XML_cross: return u"cross"_ustr;
case XML_angle: return u"angle"_ustr;
case XML_softRound: return u"softRound"_ustr;
case XML_convex: return u"convex"_ustr;
case XML_coolSlant: return u"coolSlant"_ustr;
case XML_divot: return u"divot"_ustr;
case XML_riblet: return u"riblet"_ustr;
case XML_hardEdge: return u"hardEdge"_ustr;
case XML_artDeco: return u"artDeco"_ustr;
}
SAL_WARN( "oox.drawingml", "Generic3DProperties::getBevelPresetTypeString - unexpected token" );
return OUString();
}
OUString Generic3DProperties::getPresetMaterialTypeString( sal_Int32 nType )
{
switch (nType)
{
case XML_legacyMatte: return u"legacyMatte"_ustr;
case XML_legacyPlastic: return u"legacyPlastic"_ustr;
case XML_legacyMetal: return u"legacyMetal"_ustr;
case XML_legacyWireframe: return u"legacyWireframe"_ustr;
case XML_matte: return u"matte"_ustr;
case XML_plastic: return u"plastic"_ustr;
case XML_metal: return u"metal"_ustr;
case XML_warmMatte: return u"warmMatte"_ustr;
case XML_translucentPowder: return u"translucentPowder"_ustr;
case XML_powder: return u"powder"_ustr;
case XML_dkEdge: return u"dkEdge"_ustr;
case XML_softEdge: return u"softEdge"_ustr;
case XML_clear: return u"clear"_ustr;
case XML_flat: return u"flat"_ustr;
case XML_softmetal: return u"softmetal"_ustr;
case XML_none: return u"none"_ustr;
}
SAL_WARN( "oox.drawingml", "Generic3DProperties::getPresetMaterialTypeString - unexpected token" );
return OUString();
}
css::uno::Sequence< css::beans::PropertyValue > Generic3DProperties::getCameraAttributes()
{
css::uno::Sequence<css::beans::PropertyValue> aSeq(6);
auto pSeq = aSeq.getArray();
sal_Int32 nSize = 0;
if( mfFieldOfVision.has_value() )
{
pSeq[nSize].Name = "fov";
pSeq[nSize].Value <<= *mfFieldOfVision;
nSize++;
}
if( mfZoom.has_value() )
{
pSeq[nSize].Name = "zoom";
pSeq[nSize].Value <<= *mfZoom;
nSize++;
}
if( mnPreset.has_value() )
{
pSeq[nSize].Name = "prst";
pSeq[nSize].Value <<= getCameraPrstName( *mnPreset );
nSize++;
}
if( maCameraRotation.mnLatitude.has_value() )
{
pSeq[nSize].Name = "rotLat";
pSeq[nSize].Value <<= *maCameraRotation.mnLatitude;
nSize++;
}
if( maCameraRotation.mnLongitude.has_value() )
{
pSeq[nSize].Name = "rotLon";
pSeq[nSize].Value <<= *maCameraRotation.mnLongitude;
nSize++;
}
if( maCameraRotation.mnRevolution.has_value() )
{
pSeq[nSize].Name = "rotRev";
pSeq[nSize].Value <<= *maCameraRotation.mnRevolution;
nSize++;
}
aSeq.realloc( nSize );
return aSeq;
}
css::uno::Sequence< css::beans::PropertyValue > Generic3DProperties::getLightRigAttributes()
{
css::uno::Sequence<css::beans::PropertyValue> aSeq(5);
auto pSeq = aSeq.getArray();
sal_Int32 nSize = 0;
if( mnLightRigDirection.has_value() )
{
pSeq[nSize].Name = "dir";
pSeq[nSize].Value <<= getLightRigDirName( *mnLightRigDirection );
nSize++;
}
if( mnLightRigType.has_value() )
{
pSeq[nSize].Name = "rig";
pSeq[nSize].Value <<= getLightRigName( *mnLightRigType );
nSize++;
}
if( maLightRigRotation.mnLatitude.has_value() )
{
pSeq[nSize].Name = "rotLat";
pSeq[nSize].Value <<= *maLightRigRotation.mnLatitude;
nSize++;
}
if( maLightRigRotation.mnLongitude.has_value() )
{
pSeq[nSize].Name = "rotLon";
pSeq[nSize].Value <<= *maLightRigRotation.mnLongitude;
nSize++;
}
if( maLightRigRotation.mnRevolution.has_value() )
{
pSeq[nSize].Name = "rotRev";
pSeq[nSize].Value <<= *maLightRigRotation.mnRevolution;
nSize++;
}
aSeq.realloc( nSize );
return aSeq;
}
css::uno::Sequence< css::beans::PropertyValue > Generic3DProperties::getBevelAttributes( BevelProperties rProps )
{
css::uno::Sequence<css::beans::PropertyValue> aSeq(3);
auto pSeq = aSeq.getArray();
sal_Int32 nSize = 0;
if( rProps.mnPreset.has_value() )
{
pSeq[nSize].Name = "prst";
pSeq[nSize].Value <<= getBevelPresetTypeString( *rProps.mnPreset );
nSize++;
}
if( rProps.mnWidth.has_value() )
{
pSeq[nSize].Name = "w";
pSeq[nSize].Value <<= *rProps.mnWidth;
nSize++;
}
if( rProps.mnHeight.has_value() )
{
pSeq[nSize].Name = "h";
pSeq[nSize].Value <<= *rProps.mnHeight;
nSize++;
}
aSeq.realloc( nSize );
return aSeq;
}
css::uno::Sequence< css::beans::PropertyValue > Generic3DProperties::getColorAttributes(
const Color& rColor, const GraphicHelper& rGraphicHelper, ::Color rPhClr )
{
const OUString& sColorScheme = rColor.getSchemeColorName();
if( sColorScheme.isEmpty() )
{
// RGB color and transparency value
return { comphelper::makePropertyValue(u"rgbClr"_ustr, rColor.getColor( rGraphicHelper, rPhClr )),
comphelper::makePropertyValue(u"rgbClrTransparency"_ustr, rColor.getTransparency()) };
}
// scheme color with name and transformations
return { comphelper::makePropertyValue(u"schemeClr"_ustr, sColorScheme),
comphelper::makePropertyValue(u"schemeClrTransformations"_ustr,
rColor.getTransformations()) };
}
css::uno::Sequence< css::beans::PropertyValue > Generic3DProperties::getShape3DAttributes(
const GraphicHelper& rGraphicHelper, ::Color rPhClr )
{
css::uno::Sequence<css::beans::PropertyValue> aSeq(8);
auto pSeq = aSeq.getArray();
sal_Int32 nSize = 0;
if( mnExtrusionH.has_value() )
{
pSeq[nSize].Name = "extrusionH";
pSeq[nSize].Value <<= *mnExtrusionH;
nSize++;
}
if( mnContourW.has_value() )
{
pSeq[nSize].Name = "contourW";
pSeq[nSize].Value <<= *mnContourW;
nSize++;
}
if( mnShapeZ.has_value() )
{
pSeq[nSize].Name = "z";
pSeq[nSize].Value <<= *mnShapeZ;
nSize++;
}
if( mnMaterial.has_value() )
{
pSeq[nSize].Name = "prstMaterial";
pSeq[nSize].Value <<= getPresetMaterialTypeString( *mnMaterial );
nSize++;
}
if( maTopBevelProperties.has_value() )
{
pSeq[nSize].Name = "bevelT";
pSeq[nSize].Value <<= getBevelAttributes( *maTopBevelProperties );
nSize++;
}
if( maBottomBevelProperties.has_value() )
{
pSeq[nSize].Name = "bevelB";
pSeq[nSize].Value <<= getBevelAttributes( *maBottomBevelProperties );
nSize++;
}
if( maExtrusionColor.isUsed() )
{
pSeq[nSize].Name = "extrusionClr";
pSeq[nSize].Value <<= getColorAttributes( maExtrusionColor, rGraphicHelper, rPhClr );
nSize++;
}
if( maContourColor.isUsed() )
{
pSeq[nSize].Name = "contourClr";
pSeq[nSize].Value <<= getColorAttributes( maContourColor, rGraphicHelper, rPhClr );
nSize++;
}
aSeq.realloc( nSize );
return aSeq;
}
} // namespace oox
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */