diff --git a/chart2/uiconfig/toolbar/basicshapes.xml b/chart2/uiconfig/toolbar/basicshapes.xml index 148245f66672..a0debaab8fd5 100644 --- a/chart2/uiconfig/toolbar/basicshapes.xml +++ b/chart2/uiconfig/toolbar/basicshapes.xml @@ -45,4 +45,6 @@ + + diff --git a/icon-themes/colibre/cmd/32/basicshapes.sinusoid.png b/icon-themes/colibre/cmd/32/basicshapes.sinusoid.png new file mode 100644 index 000000000000..9e418857c3b5 Binary files /dev/null and b/icon-themes/colibre/cmd/32/basicshapes.sinusoid.png differ diff --git a/icon-themes/colibre/cmd/lc_basicshapes.sinusoid.png b/icon-themes/colibre/cmd/lc_basicshapes.sinusoid.png new file mode 100644 index 000000000000..7cf307a3d500 Binary files /dev/null and b/icon-themes/colibre/cmd/lc_basicshapes.sinusoid.png differ diff --git a/icon-themes/colibre/cmd/sc_basicshapes.sinusoid.png b/icon-themes/colibre/cmd/sc_basicshapes.sinusoid.png new file mode 100644 index 000000000000..c919cc3beb42 Binary files /dev/null and b/icon-themes/colibre/cmd/sc_basicshapes.sinusoid.png differ diff --git a/icon-themes/colibre_dark/cmd/32/basicshapes.sinusoid.png b/icon-themes/colibre_dark/cmd/32/basicshapes.sinusoid.png new file mode 100644 index 000000000000..66f701ba1dc9 Binary files /dev/null and b/icon-themes/colibre_dark/cmd/32/basicshapes.sinusoid.png differ diff --git a/icon-themes/colibre_dark/cmd/lc_basicshapes.sinusoid.png b/icon-themes/colibre_dark/cmd/lc_basicshapes.sinusoid.png new file mode 100644 index 000000000000..4f49fa91fb65 Binary files /dev/null and b/icon-themes/colibre_dark/cmd/lc_basicshapes.sinusoid.png differ diff --git a/icon-themes/colibre_dark/cmd/sc_basicshapes.sinusoid.png b/icon-themes/colibre_dark/cmd/sc_basicshapes.sinusoid.png new file mode 100644 index 000000000000..c3f64f3b0d87 Binary files /dev/null and b/icon-themes/colibre_dark/cmd/sc_basicshapes.sinusoid.png differ diff --git a/icon-themes/colibre_dark_svg/cmd/32/basicshapes.sinusoid.svg b/icon-themes/colibre_dark_svg/cmd/32/basicshapes.sinusoid.svg new file mode 100644 index 000000000000..b0bff6dd1235 --- /dev/null +++ b/icon-themes/colibre_dark_svg/cmd/32/basicshapes.sinusoid.svg @@ -0,0 +1,3 @@ + + + diff --git a/icon-themes/colibre_svg/cmd/32/basicshapes.sinusoid.svg b/icon-themes/colibre_svg/cmd/32/basicshapes.sinusoid.svg new file mode 100644 index 000000000000..4567c9b427d2 --- /dev/null +++ b/icon-themes/colibre_svg/cmd/32/basicshapes.sinusoid.svg @@ -0,0 +1,3 @@ + + + diff --git a/include/svx/msdffdef.hxx b/include/svx/msdffdef.hxx index 373974e67b31..de3b2e8c6c26 100644 --- a/include/svx/msdffdef.hxx +++ b/include/svx/msdffdef.hxx @@ -478,6 +478,7 @@ enum MSO_SPT: sal_Int32 { mso_sptTextBox = 202, //for pptx shape which doesn't exist in ppt mso_sptTearDrop = 203, + mso_sptSinusoid = 204, mso_sptMax = 0x0FFF, mso_sptNil = mso_sptMax }; diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu index 5b438e01ffe1..c8ba600372b4 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu @@ -391,6 +391,14 @@ bit 3 (0x8): #define UICOMMANDDESCRIPTION_PROPERTIES_TOGGLEBUTTON 8 1 + + + Sinusoid + + + 1 + + Cylinder diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx index 4151c61798f2..25f4aa83a65b 100644 --- a/oox/source/export/shapes.cxx +++ b/oox/source/export/shapes.cxx @@ -621,12 +621,13 @@ constexpr frozen::set constDenySet( u"flowchart-display" }); -constexpr frozen::set constAllowSet( +constexpr frozen::set constAllowSet( { u"heart", u"puzzle", u"col-60da8460", - u"col-502ad400" + u"col-502ad400", + u"sinusoid" }); } // end anonymous namespace diff --git a/reportdesign/uiconfig/dbreport/toolbar/basicshapes.xml b/reportdesign/uiconfig/dbreport/toolbar/basicshapes.xml index 4bd60977eb41..ee50dd9255a3 100644 --- a/reportdesign/uiconfig/dbreport/toolbar/basicshapes.xml +++ b/reportdesign/uiconfig/dbreport/toolbar/basicshapes.xml @@ -43,4 +43,6 @@ + + \ No newline at end of file diff --git a/sc/uiconfig/scalc/toolbar/basicshapes.xml b/sc/uiconfig/scalc/toolbar/basicshapes.xml index 148245f66672..a0debaab8fd5 100644 --- a/sc/uiconfig/scalc/toolbar/basicshapes.xml +++ b/sc/uiconfig/scalc/toolbar/basicshapes.xml @@ -45,4 +45,6 @@ + + diff --git a/sd/uiconfig/sdraw/toolbar/basicshapes.xml b/sd/uiconfig/sdraw/toolbar/basicshapes.xml index 148245f66672..a0debaab8fd5 100644 --- a/sd/uiconfig/sdraw/toolbar/basicshapes.xml +++ b/sd/uiconfig/sdraw/toolbar/basicshapes.xml @@ -45,4 +45,6 @@ + + diff --git a/sd/uiconfig/simpress/toolbar/basicshapes.xml b/sd/uiconfig/simpress/toolbar/basicshapes.xml index 148245f66672..a0debaab8fd5 100644 --- a/sd/uiconfig/simpress/toolbar/basicshapes.xml +++ b/sd/uiconfig/simpress/toolbar/basicshapes.xml @@ -45,4 +45,6 @@ + + diff --git a/svx/source/customshapes/EnhancedCustomShapeGeometry.cxx b/svx/source/customshapes/EnhancedCustomShapeGeometry.cxx index 7db0ff931ac4..026eac620416 100644 --- a/svx/source/customshapes/EnhancedCustomShapeGeometry.cxx +++ b/svx/source/customshapes/EnhancedCustomShapeGeometry.cxx @@ -8352,6 +8352,62 @@ const mso_CustomShape msoTearDrop = std::span(mso_sptTearDropHandle), }; +///////////////////////////// sinusoid +const SvxMSDffVertPair mso_sptSinusoidVert[] = +{ + // calculations courtesy of section 6.3.2 of + // https://documentation.libreoffice.org/assets/Uploads/Documentation/en/Tutorials/CustomShapes7/Custom-Shape-Tutorial.pdf#page=52 + + // taking K = (3pi/2 - 3pi^2/8 - 1/2) + // transforming points to viewbox of size 21600 x 21600 + + // Start point + { 0, 10800 }, // (0, 0) + // First Bezier + { 1757, 5278 }, // (K, K) + { 3437, 0 }, // (1, 1) + { 5400, 0 }, // (pi/2, 1) + // Second Bezier + { 7362, 0 }, // (pi - 1, 1) + { 9042, 5278 }, // (pi - K, K) + { 10800, 10800 }, // (pi, 0) + // Third Bezier + { 12557, 16321 }, // (pi + K, -K) + { 14237, 21600 }, // (pi + 1, -1) + { 16200, 21600 }, // (3pi/2, -1) + // Fourth Bezier + { 18162, 21600 }, // (2pi - 1, -1) + { 19842, 16321 }, // (2pi - K, -K) + { 21600, 10800 } // (2pi, 0) +}; + +const sal_uInt16 mso_sptSinusoidSegm[] = +{ + 0x4000, 0x2004, 0x8000 +}; + +const SvxMSDffVertPair mso_sptSinusoidGluePoints[] = +{ + { 0, 10800 }, // x = 0.00 + { 5400, 0 }, // x = 0.25 + { 10800, 10800 }, // x = 0.50 + { 16200, 21600 }, // x = 0.75 + { 21600, 10800 } // x = 1.00 +}; + +const mso_CustomShape msoSinusoid = +{ + std::span(mso_sptSinusoidVert), // vertices + const_cast(mso_sptSinusoidSegm), sizeof(mso_sptSinusoidSegm) >> 1, // segments, count + std::span(), // calculations (none) + nullptr, // default values (none) + std::span(), // text area (default) + 21600, 21600, // viewbox w, h (default) + MIN_INT32, MIN_INT32, // stretch x, y (unset) + std::span(mso_sptSinusoidGluePoints), // glue points + std::span(), // handles (none) +}; + const mso_CustomShape* GetCustomShapeContent( MSO_SPT eSpType ) { @@ -8481,6 +8537,7 @@ const mso_CustomShape* GetCustomShapeContent( MSO_SPT eSpType ) case mso_sptCloudCallout : pCustomShape = &msoCloudCallout; break; case mso_sptWave : pCustomShape = &msoWave; break; case mso_sptDoubleWave : pCustomShape = &msoDoubleWave; break; + case mso_sptSinusoid : pCustomShape = &msoSinusoid; break; // callout case mso_sptCallout1 : pCustomShape = &msoCallout1; break; diff --git a/svx/source/customshapes/EnhancedCustomShapeTypeNames.cxx b/svx/source/customshapes/EnhancedCustomShapeTypeNames.cxx index 472e5f265753..cafea3164a16 100644 --- a/svx/source/customshapes/EnhancedCustomShapeTypeNames.cxx +++ b/svx/source/customshapes/EnhancedCustomShapeTypeNames.cxx @@ -236,7 +236,8 @@ const NameTypeTable pNameTypeTableArray[] = { "mso-spt201", mso_sptHostControl }, { "mso-spt202", mso_sptTextBox }, { "teardrop", mso_sptTearDrop }, - { "ooxml-rect", mso_sptRectangle } + { "ooxml-rect", mso_sptRectangle }, + { "sinusoid", mso_sptSinusoid } }; // gallery: quadrat @@ -518,7 +519,8 @@ const ACCNameTypeTable pACCNameTypeTableArray[] = { "mso-spt202", mso_sptTextBox },*/ { "frame", "Frame" }, { "col-60da8460", "Octagon Bevel" }, - { "col-502ad400", "Diamond Bevel" } + { "col-502ad400", "Diamond Bevel" }, + { "sinusoid", "Sinusoid" } }; typedef std::unordered_map TypeACCNameHashMap; diff --git a/svx/source/sidebar/shapes/ShapesUtil.cxx b/svx/source/sidebar/shapes/ShapesUtil.cxx index ffd1acb62926..02ac744b6d42 100644 --- a/svx/source/sidebar/shapes/ShapesUtil.cxx +++ b/svx/source/sidebar/shapes/ShapesUtil.cxx @@ -87,7 +87,8 @@ SvxShapeCommandsMap::SvxShapeCommandsMap() {20, ".uno:BasicShapes.cube"}, {21, ".uno:BasicShapes.paper"}, {22, ".uno:BasicShapes.frame"}, - {23, ".uno:BasicShapes.ring"} + {23, ".uno:BasicShapes.ring"}, + {24, ".uno:SymbolShapes.sinusoid"} }; mpSymbolShapes = decltype(mpSymbolShapes){ diff --git a/sw/uiconfig/sglobal/toolbar/basicshapes.xml b/sw/uiconfig/sglobal/toolbar/basicshapes.xml index 148245f66672..a0debaab8fd5 100644 --- a/sw/uiconfig/sglobal/toolbar/basicshapes.xml +++ b/sw/uiconfig/sglobal/toolbar/basicshapes.xml @@ -45,4 +45,6 @@ + + diff --git a/sw/uiconfig/sweb/toolbar/basicshapes.xml b/sw/uiconfig/sweb/toolbar/basicshapes.xml index 148245f66672..a0debaab8fd5 100644 --- a/sw/uiconfig/sweb/toolbar/basicshapes.xml +++ b/sw/uiconfig/sweb/toolbar/basicshapes.xml @@ -45,4 +45,6 @@ + + diff --git a/sw/uiconfig/swform/toolbar/basicshapes.xml b/sw/uiconfig/swform/toolbar/basicshapes.xml index 148245f66672..a0debaab8fd5 100644 --- a/sw/uiconfig/swform/toolbar/basicshapes.xml +++ b/sw/uiconfig/swform/toolbar/basicshapes.xml @@ -45,4 +45,6 @@ + + diff --git a/sw/uiconfig/swreport/toolbar/basicshapes.xml b/sw/uiconfig/swreport/toolbar/basicshapes.xml index 5b7194408b0b..7b583dff6d93 100644 --- a/sw/uiconfig/swreport/toolbar/basicshapes.xml +++ b/sw/uiconfig/swreport/toolbar/basicshapes.xml @@ -43,4 +43,6 @@ + + \ No newline at end of file diff --git a/sw/uiconfig/swriter/toolbar/basicshapes.xml b/sw/uiconfig/swriter/toolbar/basicshapes.xml index 148245f66672..a0debaab8fd5 100644 --- a/sw/uiconfig/swriter/toolbar/basicshapes.xml +++ b/sw/uiconfig/swriter/toolbar/basicshapes.xml @@ -45,4 +45,6 @@ + + diff --git a/sw/uiconfig/swxform/toolbar/basicshapes.xml b/sw/uiconfig/swxform/toolbar/basicshapes.xml index 148245f66672..a0debaab8fd5 100644 --- a/sw/uiconfig/swxform/toolbar/basicshapes.xml +++ b/sw/uiconfig/swxform/toolbar/basicshapes.xml @@ -45,4 +45,6 @@ + +