]> git.mxchange.org Git - simgear.git/commitdiff
Move parseColor to scene/util
authorThomas Geymayer <tomgey@gmail.com>
Mon, 5 Nov 2012 16:58:24 +0000 (17:58 +0100)
committerThomas Geymayer <tomgey@gmail.com>
Mon, 5 Nov 2012 16:58:24 +0000 (17:58 +0100)
parseColor is used to parse a CSS color string into an osg::Vec4
which is only available in SimGearScene. If someone needs the
function also in SimGear headless mode we have to think about
where to better place this function.

12 files changed:
simgear/canvas/Canvas.cxx
simgear/canvas/elements/CanvasImage.cxx
simgear/canvas/elements/CanvasPath.cxx
simgear/canvas/elements/CanvasText.cxx
simgear/misc/CMakeLists.txt
simgear/misc/parse_color.cxx [deleted file]
simgear/misc/parse_color.hxx [deleted file]
simgear/misc/parse_color_test.cxx [deleted file]
simgear/scene/util/CMakeLists.txt
simgear/scene/util/parse_color.cxx [new file with mode: 0644]
simgear/scene/util/parse_color.hxx [new file with mode: 0644]
simgear/scene/util/parse_color_test.cxx [new file with mode: 0644]

index acb8da88232bc19d9ed3e21d8378c0e1853574b7..c998f71016677174f262734ed1c5bc19aa307df6 100644 (file)
@@ -18,7 +18,7 @@
 
 #include "Canvas.hxx"
 #include <simgear/canvas/MouseEvent.hxx>
-#include <simgear/misc/parse_color.hxx>
+#include <simgear/scene/util/parse_color.hxx>
 #include <simgear/scene/util/RenderConstants.hxx>
 
 #include <osg/Camera>
index 811c6c17c4cd701788da9d2d4923da4e464af5eb..2d07d8e8af0b1f6c1c245fb59afb2eae3cc3524e 100644 (file)
@@ -21,7 +21,7 @@
 #include <simgear/canvas/Canvas.hxx>
 #include <simgear/canvas/CanvasMgr.hxx>
 #include <simgear/canvas/CanvasSystemAdapter.hxx>
-#include <simgear/misc/parse_color.hxx>
+#include <simgear/scene/util/parse_color.hxx>
 #include <simgear/misc/sg_path.hxx>
 
 #include <osg/Array>
index ac9d6a9c6b546fe5639f524baec4fbd895361bd6..bdbd17c65f29e65f419d00cfe355f1c10cfe9345 100644 (file)
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
 
 #include "CanvasPath.hxx"
-#include <simgear/misc/parse_color.hxx>
+#include <simgear/scene/util/parse_color.hxx>
 
 #include <osg/Drawable>
 #include <osg/BlendFunc>
index fdaa7895a6c7b9d45894f5a01d9c51242d0a6ec3..2ddf39d4a26f2610698a802f223172679436198f 100644 (file)
@@ -19,7 +19,7 @@
 #include "CanvasText.hxx"
 #include <simgear/canvas/Canvas.hxx>
 #include <simgear/canvas/CanvasSystemAdapter.hxx>
-#include <simgear/misc/parse_color.hxx>
+#include <simgear/scene/util/parse_color.hxx>
 #include <osgText/Text>
 
 namespace simgear
index 8ef0f2e30a56dbe201fbbe8a5e539b49edaed5d2..d07b6718b714f2e18a793b532fde310a3cf54d02 100644 (file)
@@ -4,7 +4,6 @@ include (SimGearComponent)
 set(HEADERS 
     ResourceManager.hxx
     interpolator.hxx
-    parse_color.hxx
     sg_dir.hxx
     sg_path.hxx
     sgstream.hxx
@@ -20,7 +19,6 @@ set(HEADERS
 set(SOURCES 
     ResourceManager.cxx
     interpolator.cxx
-    parse_color.cxx
     sg_dir.cxx
     sg_path.cxx
     sgstream.cxx
@@ -41,10 +39,6 @@ add_executable(test_strings strutils_test.cxx )
 add_test(test_strings ${EXECUTABLE_OUTPUT_PATH}/test_strings)
 target_link_libraries(test_strings SimGearCore)
 
-add_executable(test_parse_color parse_color_test.cxx )
-add_test(test_parse_color ${EXECUTABLE_OUTPUT_PATH}/test_parse_color)
-target_link_libraries(test_parse_color SimGearCore)
-
 add_executable(test_path path_test.cxx )
 add_test(test_path ${EXECUTABLE_OUTPUT_PATH}/test_path)
 target_link_libraries(test_path SimGearCore)
diff --git a/simgear/misc/parse_color.cxx b/simgear/misc/parse_color.cxx
deleted file mode 100644 (file)
index b739522..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-// Parse CSS colors
-//
-// Copyright (C) 2012  Thomas Geymayer <tomgey@gmail.com>
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
-
-#include <simgear_config.h>
-#ifndef SIMGEAR_HEADLESS
-# include <osg/Vec4>
-#endif
-#include "parse_color.hxx"
-
-#include <boost/algorithm/string/predicate.hpp>
-#include <boost/algorithm/string/trim.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/tokenizer.hpp>
-
-namespace simgear
-{
-
-  //----------------------------------------------------------------------------
-  bool parseColor(std::string str, SGVec4f& result)
-  {
-    boost::trim(str);
-    SGVec4f color(0,0,0,1);
-
-    if( str.empty() )
-      return false;
-
-    // #rrggbb
-    if( str[0] == '#' )
-    {
-      const int offsets[] = {2,2,2};
-      const boost::offset_separator hex_separator( boost::begin(offsets),
-                                                   boost::end(offsets) );
-      typedef boost::tokenizer<boost::offset_separator> offset_tokenizer;
-      offset_tokenizer tokens(str.begin() + 1, str.end(), hex_separator);
-
-      int comp = 0;
-      for( offset_tokenizer::const_iterator tok = tokens.begin();
-           tok != tokens.end() && comp < 4;
-           ++tok, ++comp )
-      {
-        color[comp] = strtol(std::string(*tok).c_str(), 0, 16) / 255.f;
-      }
-    }
-    // rgb(r,g,b)
-    // rgba(r,g,b,a)
-    else if( boost::ends_with(str, ")") )
-    {
-      const std::string RGB = "rgb(",
-                        RGBA = "rgba(";
-      size_t pos;
-      if( boost::starts_with(str, RGB) )
-        pos = RGB.length();
-      else if( boost::starts_with(str, RGBA) )
-        pos = RGBA.length();
-      else
-        return false;
-
-      typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
-      const boost::char_separator<char> del(", \t\n");
-
-      tokenizer tokens(str.begin() + pos, str.end() - 1, del);
-      int comp = 0;
-      for( tokenizer::const_iterator tok = tokens.begin();
-           tok != tokens.end() && comp < 4;
-           ++tok, ++comp )
-      {
-        color[comp] = boost::lexical_cast<float>(*tok)
-                    // rgb = [0,255], a = [0,1]
-                    / (comp < 3 ? 255 : 1);
-      }
-    }
-    else
-      return false;
-
-    result = color;
-    return true;
-  }
-
-#ifndef SIMGEAR_HEADLESS
-  bool parseColor(std::string str, osg::Vec4& result)
-  {
-    SGVec4f color;
-    if( !parseColor(str, color) )
-      return false;
-
-    result.set(color[0], color[1], color[2], color[3]);
-    return true;
-  }
-#endif
-
-} // namespace simgear
diff --git a/simgear/misc/parse_color.hxx b/simgear/misc/parse_color.hxx
deleted file mode 100644 (file)
index 83d662b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Parse CSS colors
-//
-// Copyright (C) 2012  Thomas Geymayer <tomgey@gmail.com>
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Library General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Library General Public License for more details.
-//
-// You should have received a copy of the GNU Library General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
-
-#ifndef PARSE_COLOR_HXX_
-#define PARSE_COLOR_HXX_
-
-#include <simgear/math/SGLimits.hxx>
-#include <simgear/math/SGMathFwd.hxx>
-#include <simgear/math/SGVec4.hxx>
-
-#include <string>
-
-namespace simgear
-{
-
-  /**
-   * Parse a (CSS) color
-   *
-   * @param str     Text to parse
-   * @param result  Output for parse color
-   *
-   * @return Whether str contained a valid color (and result has been modified)
-   */
-  bool parseColor(std::string str, SGVec4f& result);
-
-#ifdef OSG_VEC4
-  /**
-   * Parse a (CSS) color into an osg::Vec4
-   *
-   * @param str     Text to parse
-   * @param result  Output for parse color
-   *
-   * @return Whether str contained a valid color (and result has been modified)
-   */
-  bool parseColor(std::string str, osg::Vec4& result);
-#endif
-
-} // namespace simgear
-
-#endif /* PARSE_COLOR_HXX_ */
diff --git a/simgear/misc/parse_color_test.cxx b/simgear/misc/parse_color_test.cxx
deleted file mode 100644 (file)
index c3795e6..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <simgear/compiler.h>
-
-#include "parse_color.hxx"
-
-#include <iostream>
-
-#define COMPARE(a, b) \
-  if( (a) != (b) ) \
-  { \
-    std::cerr << "failed:" << #a << " != " << #b << std::endl; \
-    return 1; \
-  }
-
-#define VERIFY(a) \
-  if( !(a) ) \
-  { \
-    std::cerr << "failed:" << #a << std::endl; \
-    return 1; \
-  }
-
-#define VERIFY_COLOR(str, r, g, b, a) \
-  VERIFY(simgear::parseColor(str, color)) \
-  COMPARE(color, SGVec4f(r, g, b, a))
-    
-int main (int ac, char ** av)
-{
-  SGVec4f color;
-  VERIFY_COLOR("#ff0000", 1,0,0,1);
-  VERIFY_COLOR("#00ff00", 0,1,0,1);
-  VERIFY_COLOR("#0000ff", 0,0,1,1);
-  VERIFY_COLOR("rgb( 255,\t127.5,0)", 1, 0.5, 0, 1);
-  VERIFY_COLOR("rgba(255,  127.5,0, 0.5)", 1, 0.5, 0, 0.5);
-  std::cout << "all tests passed successfully!" << std::endl;
-  return 0;
-}
index 124f0ba5462a6ee885bce4bcda63932e62a3a164..d10a42045b70d9c6de0a5de3dd8c43e0739679ab 100644 (file)
@@ -8,6 +8,7 @@ set(HEADERS
     OptionsReadFileCallback.hxx
     OsgMath.hxx
     OsgSingleton.hxx
+    parse_color.hxx
     PrimitiveUtils.hxx
     QuadTreeBuilder.hxx
     RenderConstants.hxx
@@ -34,6 +35,7 @@ set(SOURCES
     NodeAndDrawableVisitor.cxx
     Noise.cxx
     OptionsReadFileCallback.cxx
+    parse_color.cxx
     PrimitiveUtils.cxx
     QuadTreeBuilder.cxx
     SGEnlargeBoundingBox.cxx
@@ -49,3 +51,9 @@ set(SOURCES
     )
 
 simgear_scene_component(util scene/util "${SOURCES}" "${HEADERS}")
+
+if(ENABLE_TESTS)
+add_executable(test_parse_color parse_color_test.cxx )
+add_test(test_parse_color ${EXECUTABLE_OUTPUT_PATH}/test_parse_color)
+target_link_libraries(test_parse_color SimGearScene)
+endif(ENABLE_TESTS)
diff --git a/simgear/scene/util/parse_color.cxx b/simgear/scene/util/parse_color.cxx
new file mode 100644 (file)
index 0000000..f594712
--- /dev/null
@@ -0,0 +1,90 @@
+// Parse CSS colors
+//
+// Copyright (C) 2012  Thomas Geymayer <tomgey@gmail.com>
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
+
+#include "parse_color.hxx"
+
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/tokenizer.hpp>
+
+namespace simgear
+{
+
+  //----------------------------------------------------------------------------
+  bool parseColor(std::string str, osg::Vec4& result)
+  {
+    boost::trim(str);
+    osg::Vec4 color(0,0,0,1);
+
+    if( str.empty() )
+      return false;
+
+    // #rrggbb
+    if( str[0] == '#' )
+    {
+      const int offsets[] = {2,2,2};
+      const boost::offset_separator hex_separator( boost::begin(offsets),
+                                                   boost::end(offsets) );
+      typedef boost::tokenizer<boost::offset_separator> offset_tokenizer;
+      offset_tokenizer tokens(str.begin() + 1, str.end(), hex_separator);
+
+      int comp = 0;
+      for( offset_tokenizer::const_iterator tok = tokens.begin();
+           tok != tokens.end() && comp < 4;
+           ++tok, ++comp )
+      {
+        color[comp] = strtol(std::string(*tok).c_str(), 0, 16) / 255.f;
+      }
+    }
+    // rgb(r,g,b)
+    // rgba(r,g,b,a)
+    else if( boost::ends_with(str, ")") )
+    {
+      const std::string RGB = "rgb(",
+                        RGBA = "rgba(";
+      size_t pos;
+      if( boost::starts_with(str, RGB) )
+        pos = RGB.length();
+      else if( boost::starts_with(str, RGBA) )
+        pos = RGBA.length();
+      else
+        return false;
+
+      typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+      const boost::char_separator<char> del(", \t\n");
+
+      tokenizer tokens(str.begin() + pos, str.end() - 1, del);
+      int comp = 0;
+      for( tokenizer::const_iterator tok = tokens.begin();
+           tok != tokens.end() && comp < 4;
+           ++tok, ++comp )
+      {
+        color[comp] = boost::lexical_cast<float>(*tok)
+                    // rgb = [0,255], a = [0,1]
+                    / (comp < 3 ? 255 : 1);
+      }
+    }
+    else
+      return false;
+
+    result = color;
+    return true;
+  }
+
+} // namespace simgear
diff --git a/simgear/scene/util/parse_color.hxx b/simgear/scene/util/parse_color.hxx
new file mode 100644 (file)
index 0000000..d4ecad3
--- /dev/null
@@ -0,0 +1,40 @@
+// Parse CSS colors
+//
+// Copyright (C) 2012  Thomas Geymayer <tomgey@gmail.com>
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU Library General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
+
+#ifndef PARSE_COLOR_HXX_
+#define PARSE_COLOR_HXX_
+
+#include <osg/Vec4>
+#include <string>
+
+namespace simgear
+{
+
+  /**
+   * Parse a (CSS) color
+   *
+   * @param str     Text to parse
+   * @param result  Output for parse color
+   *
+   * @return Whether str contained a valid color (and result has been modified)
+   */
+  bool parseColor(std::string str, osg::Vec4& result);
+
+} // namespace simgear
+
+#endif /* PARSE_COLOR_HXX_ */
diff --git a/simgear/scene/util/parse_color_test.cxx b/simgear/scene/util/parse_color_test.cxx
new file mode 100644 (file)
index 0000000..c41b264
--- /dev/null
@@ -0,0 +1,35 @@
+#include <simgear/compiler.h>
+
+#include "parse_color.hxx"
+
+#include <iostream>
+
+#define COMPARE(a, b) \
+  if( (a) != (b) ) \
+  { \
+    std::cerr << "failed:" << #a << " != " << #b << std::endl; \
+    return 1; \
+  }
+
+#define VERIFY(a) \
+  if( !(a) ) \
+  { \
+    std::cerr << "failed:" << #a << std::endl; \
+    return 1; \
+  }
+
+#define VERIFY_COLOR(str, r, g, b, a) \
+  VERIFY(simgear::parseColor(str, color)) \
+  COMPARE(color, osg::Vec4(r, g, b, a))
+    
+int main (int ac, char ** av)
+{
+  osg::Vec4 color;
+  VERIFY_COLOR("#ff0000", 1,0,0,1);
+  VERIFY_COLOR("#00ff00", 0,1,0,1);
+  VERIFY_COLOR("#0000ff", 0,0,1,1);
+  VERIFY_COLOR("rgb( 255,\t127.5,0)", 1, 0.5, 0, 1);
+  VERIFY_COLOR("rgba(255,  127.5,0, 0.5)", 1, 0.5, 0, 0.5);
+  std::cout << "all tests passed successfully!" << std::endl;
+  return 0;
+}