App: move Color class to its own sources
This commit is contained in:
@@ -256,6 +256,7 @@ SET(FreeCADApp_CPP_SRCS
|
||||
ApplicationPy.cpp
|
||||
AutoTransaction.cpp
|
||||
Branding.cpp
|
||||
Color.cpp
|
||||
ColorModel.cpp
|
||||
ComplexGeoData.cpp
|
||||
ComplexGeoDataPyImp.cpp
|
||||
@@ -272,6 +273,7 @@ SET(FreeCADApp_HPP_SRCS
|
||||
Application.h
|
||||
AutoTransaction.h
|
||||
Branding.h
|
||||
Color.h
|
||||
ColorModel.h
|
||||
ComplexGeoData.h
|
||||
Enumeration.h
|
||||
|
||||
145
src/App/Color.cpp
Normal file
145
src/App/Color.cpp
Normal file
@@ -0,0 +1,145 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2005 Jürgen Riegel <juergen.riegel@web.de> *
|
||||
* *
|
||||
* This file is part of the FreeCAD CAx development system. *
|
||||
* *
|
||||
* 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; see the file COPYING.LIB. If not, *
|
||||
* write to the Free Software Foundation, Inc., 59 Temple Place, *
|
||||
* Suite 330, Boston, MA 02111-1307, USA *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include "PreCompiled.h"
|
||||
|
||||
#ifndef _PreComp_
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#endif
|
||||
|
||||
#include "Color.h"
|
||||
|
||||
using namespace App;
|
||||
|
||||
|
||||
Color::Color(float R, float G, float B, float A)
|
||||
: r(R)
|
||||
, g(G)
|
||||
, b(B)
|
||||
, a(A)
|
||||
{
|
||||
}
|
||||
|
||||
Color::Color(uint32_t rgba)
|
||||
{
|
||||
setPackedValue( rgba );
|
||||
}
|
||||
|
||||
bool Color::operator==(const Color& c) const
|
||||
{
|
||||
return getPackedValue() == c.getPackedValue();
|
||||
//return (c.r==r && c.g==g && c.b==b && c.a==a);
|
||||
}
|
||||
|
||||
bool Color::operator!=(const Color& c) const
|
||||
{
|
||||
return !operator==(c);
|
||||
}
|
||||
|
||||
void Color::set(float R,float G, float B, float A)
|
||||
{
|
||||
r = R;
|
||||
g = G;
|
||||
b = B;
|
||||
a = A;
|
||||
}
|
||||
|
||||
Color& Color::setPackedValue(uint32_t rgba)
|
||||
{
|
||||
this->set((rgba >> 24)/255.0f,
|
||||
((rgba >> 16)&0xff)/255.0f,
|
||||
((rgba >> 8)&0xff)/255.0f,
|
||||
(rgba&0xff)/255.0f);
|
||||
return *this;
|
||||
}
|
||||
|
||||
uint32_t Color::getPackedValue() const
|
||||
{
|
||||
return (static_cast<uint32_t>(r*255.0f + 0.5f) << 24 |
|
||||
static_cast<uint32_t>(g*255.0f + 0.5f) << 16 |
|
||||
static_cast<uint32_t>(b*255.0f + 0.5f) << 8 |
|
||||
static_cast<uint32_t>(a*255.0f + 0.5f));
|
||||
}
|
||||
|
||||
uint32_t Color::getPackedARGB() const
|
||||
{
|
||||
return (static_cast<uint32_t>(a*255.0f + 0.5f) << 24 |
|
||||
static_cast<uint32_t>(r*255.0f + 0.5f) << 16 |
|
||||
static_cast<uint32_t>(g*255.0f + 0.5f) << 8 |
|
||||
static_cast<uint32_t>(b*255.0f + 0.5f));
|
||||
}
|
||||
|
||||
std::string Color::asHexString() const
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "#" << std::hex << std::uppercase << std::setfill('0')
|
||||
<< std::setw(2) << int(r*255.0f)
|
||||
<< std::setw(2) << int(g*255.0f)
|
||||
<< std::setw(2) << int(b*255.0f);
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
bool Color::fromHexString(const std::string& hex)
|
||||
{
|
||||
if (hex.size() < 7 || hex[0] != '#')
|
||||
return false;
|
||||
// #RRGGBB
|
||||
if (hex.size() == 7) {
|
||||
std::stringstream ss(hex);
|
||||
unsigned int rgb;
|
||||
char c;
|
||||
|
||||
ss >> c >> std::hex >> rgb;
|
||||
int rc = (rgb >> 16) & 0xff;
|
||||
int gc = (rgb >> 8) & 0xff;
|
||||
int bc = rgb & 0xff;
|
||||
|
||||
r = rc / 255.0f;
|
||||
g = gc / 255.0f;
|
||||
b = bc / 255.0f;
|
||||
|
||||
return true;
|
||||
}
|
||||
// #RRGGBBAA
|
||||
if (hex.size() == 9) {
|
||||
std::stringstream ss(hex);
|
||||
unsigned int rgba;
|
||||
char c;
|
||||
|
||||
ss >> c >> std::hex >> rgba;
|
||||
int rc = (rgba >> 24) & 0xff;
|
||||
int gc = (rgba >> 16) & 0xff;
|
||||
int bc = (rgba >> 8) & 0xff;
|
||||
int ac = rgba & 0xff;
|
||||
|
||||
r = rc / 255.0f;
|
||||
g = gc / 255.0f;
|
||||
b = bc / 255.0f;
|
||||
a = ac / 255.0f;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
126
src/App/Color.h
Normal file
126
src/App/Color.h
Normal file
@@ -0,0 +1,126 @@
|
||||
/***************************************************************************
|
||||
* Copyright (c) 2005 Jürgen Riegel <juergen.riegel@web.de> *
|
||||
* *
|
||||
* This file is part of the FreeCAD CAx development system. *
|
||||
* *
|
||||
* 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; see the file COPYING.LIB. If not, *
|
||||
* write to the Free Software Foundation, Inc., 59 Temple Place, *
|
||||
* Suite 330, Boston, MA 02111-1307, USA *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#ifndef APP_COLOR_H
|
||||
#define APP_COLOR_H
|
||||
|
||||
#ifdef __GNUC__
|
||||
# include <cstdint>
|
||||
#endif
|
||||
#include <string>
|
||||
|
||||
#include <FCGlobal.h>
|
||||
|
||||
namespace App
|
||||
{
|
||||
|
||||
/** Color class
|
||||
*/
|
||||
class AppExport Color
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Defines the color as (R,G,B,A) whereas all values are in the range [0,1].
|
||||
* \a A defines the transparency.
|
||||
*/
|
||||
explicit Color(float R=0.0,float G=0.0, float B=0.0, float A=0.0);
|
||||
|
||||
/**
|
||||
* Does basically the same as the constructor above unless that (R,G,B,A) is
|
||||
* encoded as an unsigned int.
|
||||
*/
|
||||
explicit Color(uint32_t rgba);
|
||||
|
||||
/** Copy constructor. */
|
||||
Color(const Color& c) = default;
|
||||
Color(Color&&) = default;
|
||||
|
||||
/** Returns true if both colors are equal. Therefore all components must be equal. */
|
||||
bool operator==(const Color& c) const;
|
||||
bool operator!=(const Color& c) const;
|
||||
/**
|
||||
* Defines the color as (R,G,B,A) whereas all values are in the range [0,1].
|
||||
* \a A defines the transparency, 0 means complete opaque and 1 invisible.
|
||||
*/
|
||||
void set(float R,float G, float B, float A=0.0);
|
||||
Color& operator=(const Color& c) = default;
|
||||
Color& operator=(Color&& c) = default;
|
||||
/**
|
||||
* Sets the color value as a 32 bit combined red/green/blue/alpha value.
|
||||
* Each component is 8 bit wide (i.e. from 0x00 to 0xff), and the red
|
||||
* value should be stored leftmost, like this: 0xRRGGBBAA.
|
||||
*
|
||||
* \sa getPackedValue().
|
||||
*/
|
||||
Color& setPackedValue(uint32_t rgba);
|
||||
/**
|
||||
* Returns color as a 32 bit packed unsigned int in the form 0xRRGGBBAA.
|
||||
*
|
||||
* \sa setPackedValue().
|
||||
*/
|
||||
uint32_t getPackedValue() const;
|
||||
/**
|
||||
* Returns color as a 32 bit packed unsigned int in the form 0xAARRGGBB.
|
||||
*/
|
||||
uint32_t getPackedARGB() const;
|
||||
template <typename T>
|
||||
static uint32_t asPackedRGBA(const T& color) {
|
||||
return (color.red() << 24) | (color.green() << 16) | (color.blue() << 8) | color.alpha();
|
||||
}
|
||||
template <typename T>
|
||||
static uint32_t asPackedRGB(const T& color) {
|
||||
return (color.red() << 24) | (color.green() << 16) | (color.blue() << 8);
|
||||
}
|
||||
/**
|
||||
* creates FC Color from template type, e.g. Qt QColor
|
||||
*/
|
||||
template <typename T>
|
||||
void setValue(const T& q)
|
||||
{ set(q.redF(),q.greenF(),q.blueF()); }
|
||||
/**
|
||||
* returns a template type e.g. Qt color equivalent to FC color
|
||||
*
|
||||
*/
|
||||
template <typename T>
|
||||
inline T asValue() const {
|
||||
return(T(int(r*255.0f),int(g*255.0f),int(b*255.0f)));
|
||||
}
|
||||
/**
|
||||
* returns color as hex color "#RRGGBB"
|
||||
*
|
||||
*/
|
||||
std::string asHexString() const;
|
||||
|
||||
/**
|
||||
* gets color from hex color "#RRGGBB"
|
||||
*
|
||||
*/
|
||||
bool fromHexString(const std::string& hex);
|
||||
|
||||
/// color values, public accessible
|
||||
float r,g,b,a;
|
||||
};
|
||||
|
||||
} //namespace App
|
||||
|
||||
#endif // APP_COLOR_H
|
||||
@@ -24,164 +24,11 @@
|
||||
#ifndef APP_MATERIAL_H
|
||||
#define APP_MATERIAL_H
|
||||
|
||||
#ifdef __GNUC__
|
||||
# include <cstdint>
|
||||
#endif
|
||||
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <FCGlobal.h>
|
||||
#include <App/Color.h>
|
||||
|
||||
namespace App
|
||||
{
|
||||
|
||||
/** Color class
|
||||
*/
|
||||
class AppExport Color
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Defines the color as (R,G,B,A) whereas all values are in the range [0,1].
|
||||
* \a A defines the transparency.
|
||||
*/
|
||||
explicit Color(float R=0.0,float G=0.0, float B=0.0, float A=0.0)
|
||||
:r(R),g(G),b(B),a(A){}
|
||||
/**
|
||||
* Does basically the same as the constructor above unless that (R,G,B,A) is
|
||||
* encoded as an unsigned int.
|
||||
*/
|
||||
explicit Color(uint32_t rgba)
|
||||
{ setPackedValue( rgba ); }
|
||||
/** Copy constructor. */
|
||||
Color(const Color& c)
|
||||
:r(c.r),g(c.g),b(c.b),a(c.a){}
|
||||
/** Returns true if both colors are equal. Therefore all components must be equal. */
|
||||
bool operator==(const Color& c) const
|
||||
{
|
||||
return getPackedValue() == c.getPackedValue();
|
||||
//return (c.r==r && c.g==g && c.b==b && c.a==a);
|
||||
}
|
||||
bool operator!=(const Color& c) const
|
||||
{
|
||||
return !operator==(c);
|
||||
}
|
||||
/**
|
||||
* Defines the color as (R,G,B,A) whereas all values are in the range [0,1].
|
||||
* \a A defines the transparency, 0 means complete opaque and 1 invisible.
|
||||
*/
|
||||
void set(float R,float G, float B, float A=0.0)
|
||||
{
|
||||
r=R;g=G;b=B;a=A;
|
||||
}
|
||||
Color& operator=(const Color& c)
|
||||
{
|
||||
r=c.r;g=c.g;b=c.b;a=c.a;
|
||||
return *this;
|
||||
}
|
||||
/**
|
||||
* Sets the color value as a 32 bit combined red/green/blue/alpha value.
|
||||
* Each component is 8 bit wide (i.e. from 0x00 to 0xff), and the red
|
||||
* value should be stored leftmost, like this: 0xRRGGBBAA.
|
||||
*
|
||||
* \sa getPackedValue().
|
||||
*/
|
||||
Color& setPackedValue(uint32_t rgba)
|
||||
{
|
||||
this->set((rgba >> 24)/255.0f,
|
||||
((rgba >> 16)&0xff)/255.0f,
|
||||
((rgba >> 8)&0xff)/255.0f,
|
||||
(rgba&0xff)/255.0f);
|
||||
return *this;
|
||||
}
|
||||
/**
|
||||
* Returns color as a 32 bit packed unsigned int in the form 0xRRGGBBAA.
|
||||
*
|
||||
* \sa setPackedValue().
|
||||
*/
|
||||
uint32_t getPackedValue() const
|
||||
{
|
||||
return (static_cast<uint32_t>(r*255.0f + 0.5f) << 24 |
|
||||
static_cast<uint32_t>(g*255.0f + 0.5f) << 16 |
|
||||
static_cast<uint32_t>(b*255.0f + 0.5f) << 8 |
|
||||
static_cast<uint32_t>(a*255.0f + 0.5f));
|
||||
}
|
||||
/**
|
||||
* creates FC Color from template type, e.g. Qt QColor
|
||||
*/
|
||||
template <typename T>
|
||||
void setValue(const T& q)
|
||||
{ set(q.redF(),q.greenF(),q.blueF()); }
|
||||
/**
|
||||
* returns a template type e.g. Qt color equivalent to FC color
|
||||
*
|
||||
*/
|
||||
template <typename T>
|
||||
inline T asValue() const {
|
||||
return(T(int(r*255.0f),int(g*255.0f),int(b*255.0f)));
|
||||
}
|
||||
/**
|
||||
* returns color as hex color "#RRGGBB"
|
||||
*
|
||||
*/
|
||||
std::string asHexString() const {
|
||||
std::stringstream ss;
|
||||
ss << "#" << std::hex << std::uppercase << std::setfill('0') << std::setw(2) << int(r*255.0f)
|
||||
<< std::setw(2) << int(g*255.0f)
|
||||
<< std::setw(2) << int(b*255.0f);
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
/**
|
||||
* gets color from hex color "#RRGGBB"
|
||||
*
|
||||
*/
|
||||
bool fromHexString(const std::string& hex) {
|
||||
if (hex.size() < 7 || hex[0] != '#')
|
||||
return false;
|
||||
// #RRGGBB
|
||||
if (hex.size() == 7) {
|
||||
std::stringstream ss(hex);
|
||||
unsigned int rgb;
|
||||
char c;
|
||||
|
||||
ss >> c >> std::hex >> rgb;
|
||||
int rc = (rgb >> 16) & 0xff;
|
||||
int gc = (rgb >> 8) & 0xff;
|
||||
int bc = rgb & 0xff;
|
||||
|
||||
r = rc / 255.0f;
|
||||
g = gc / 255.0f;
|
||||
b = bc / 255.0f;
|
||||
|
||||
return true;
|
||||
}
|
||||
// #RRGGBBAA
|
||||
if (hex.size() == 9) {
|
||||
std::stringstream ss(hex);
|
||||
unsigned int rgba;
|
||||
char c;
|
||||
|
||||
ss >> c >> std::hex >> rgba;
|
||||
int rc = (rgba >> 24) & 0xff;
|
||||
int gc = (rgba >> 16) & 0xff;
|
||||
int bc = (rgba >> 8) & 0xff;
|
||||
int ac = rgba & 0xff;
|
||||
|
||||
r = rc / 255.0f;
|
||||
g = gc / 255.0f;
|
||||
b = bc / 255.0f;
|
||||
a = ac / 255.0f;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// color values, public accessible
|
||||
float r,g,b,a;
|
||||
};
|
||||
|
||||
/** Material class
|
||||
*/
|
||||
class AppExport Material
|
||||
|
||||
Reference in New Issue
Block a user