From 5a72a7d9f484c807e45ebd85b2b93e8580ef798e Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Tue, 16 Jan 2018 09:01:55 +0100 Subject: [PATCH] canvas: Refactor Path::addSegment with std::initializer_list --- simgear/canvas/elements/CMakeLists.txt | 5 ---- simgear/canvas/elements/CanvasPath.cxx | 27 +++++++++++++------ simgear/canvas/elements/CanvasPath.hxx | 8 +++--- .../elements/detail/add_segment_variadic.hxx | 21 --------------- 4 files changed, 22 insertions(+), 39 deletions(-) delete mode 100644 simgear/canvas/elements/detail/add_segment_variadic.hxx diff --git a/simgear/canvas/elements/CMakeLists.txt b/simgear/canvas/elements/CMakeLists.txt index 2b537c0c..43ff1c1a 100644 --- a/simgear/canvas/elements/CMakeLists.txt +++ b/simgear/canvas/elements/CMakeLists.txt @@ -9,10 +9,6 @@ set(HEADERS CanvasText.hxx ) -set(DETAIL_HEADERS - detail/add_segment_variadic.hxx -) - set(SOURCES CanvasElement.cxx CanvasGroup.cxx @@ -23,7 +19,6 @@ set(SOURCES ) simgear_scene_component(canvas-elements canvas/elements "${SOURCES}" "${HEADERS}") -simgear_component(canvas-elements/detail canvas/elements/detail "" "${DETAIL_HEADERS}") add_boost_test(canvas_element SOURCES canvas_element_test.cpp diff --git a/simgear/canvas/elements/CanvasPath.cxx b/simgear/canvas/elements/CanvasPath.cxx index cbf5f42c..188f70d6 100644 --- a/simgear/canvas/elements/CanvasPath.cxx +++ b/simgear/canvas/elements/CanvasPath.cxx @@ -740,52 +740,63 @@ namespace canvas return _path->getTransformedBounds(m); } + //---------------------------------------------------------------------------- + Path& Path::addSegment(uint8_t cmd, std::initializer_list coords) + { + _node->addChild("cmd")->setIntValue(cmd); + + for(float coord: coords) + _node->addChild("coord")->setFloatValue(coord); + + return *this; + } + //---------------------------------------------------------------------------- Path& Path::moveTo(float x_abs, float y_abs) { - return addSegment(VG_MOVE_TO_ABS, x_abs, y_abs); + return addSegment(VG_MOVE_TO_ABS, {x_abs, y_abs}); } //---------------------------------------------------------------------------- Path& Path::move(float x_rel, float y_rel) { - return addSegment(VG_MOVE_TO_REL, x_rel, y_rel); + return addSegment(VG_MOVE_TO_REL, {x_rel, y_rel}); } //---------------------------------------------------------------------------- Path& Path::lineTo(float x_abs, float y_abs) { - return addSegment(VG_LINE_TO_ABS, x_abs, y_abs); + return addSegment(VG_LINE_TO_ABS, {x_abs, y_abs}); } //---------------------------------------------------------------------------- Path& Path::line(float x_rel, float y_rel) { - return addSegment(VG_LINE_TO_REL, x_rel, y_rel); + return addSegment(VG_LINE_TO_REL, {x_rel, y_rel}); } //---------------------------------------------------------------------------- Path& Path::horizTo(float x_abs) { - return addSegment(VG_HLINE_TO_ABS, x_abs); + return addSegment(VG_HLINE_TO_ABS, {x_abs}); } //---------------------------------------------------------------------------- Path& Path::horiz(float x_rel) { - return addSegment(VG_HLINE_TO_REL, x_rel); + return addSegment(VG_HLINE_TO_REL, {x_rel}); } //---------------------------------------------------------------------------- Path& Path::vertTo(float y_abs) { - return addSegment(VG_VLINE_TO_ABS, y_abs); + return addSegment(VG_VLINE_TO_ABS, {y_abs}); } //---------------------------------------------------------------------------- Path& Path::vert(float y_rel) { - return addSegment(VG_VLINE_TO_REL, y_rel); + return addSegment(VG_VLINE_TO_REL, {y_rel}); } //---------------------------------------------------------------------------- diff --git a/simgear/canvas/elements/CanvasPath.hxx b/simgear/canvas/elements/CanvasPath.hxx index f31380ba..2b7804f9 100644 --- a/simgear/canvas/elements/CanvasPath.hxx +++ b/simgear/canvas/elements/CanvasPath.hxx @@ -20,8 +20,8 @@ #define CANVAS_PATH_HXX_ #include "CanvasElement.hxx" -#include #include +#include namespace simgear { @@ -44,10 +44,8 @@ namespace canvas virtual osg::BoundingBox getTransformedBounds(const osg::Matrix& m) const; -#define BOOST_PP_ITERATION_LIMITS (0, 6) -#define BOOST_PP_FILENAME_1 \ - -#include BOOST_PP_ITERATE() + /** Add a segment with the given command and coordinates */ + Path& addSegment(uint8_t cmd, std::initializer_list coords = {}); /** Move path cursor */ Path& moveTo(float x_abs, float y_abs); diff --git a/simgear/canvas/elements/detail/add_segment_variadic.hxx b/simgear/canvas/elements/detail/add_segment_variadic.hxx deleted file mode 100644 index cb4f434e..00000000 --- a/simgear/canvas/elements/detail/add_segment_variadic.hxx +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef CANVAS_PATH_HXX_ -# error Canvas - do not include this file! -#endif - -#define n BOOST_PP_ITERATION() - -Path& addSegment( uint8_t cmd - BOOST_PP_COMMA_IF(n) - BOOST_PP_ENUM_PARAMS(n, float coord) ) -{ - _node->addChild("cmd")->setIntValue(cmd); - -#define SG_CANVAS_PATH_SET_COORD(z, n, dummy)\ - _node->addChild("coord")->setFloatValue(coord##n); - - BOOST_PP_REPEAT(n, SG_CANVAS_PATH_SET_COORD, 0) -#undef SG_CANVAS_PATH_SET_COORD - return *this; -} - -#undef n