PIVariantTypes::Color::toString() now can return color name

This commit is contained in:
2022-12-05 22:08:58 +03:00
parent 8e744249de
commit 3625627072
5 changed files with 22 additions and 9 deletions

View File

@@ -187,7 +187,9 @@ PIColorCollection & PIColorCollection::instance() {
PIColorCollection::PIColorCollection() { PIColorCollection::PIColorCollection() {
CSSColor * c = css_colors; CSSColor * c = css_colors;
while (c->name) { while (c->name) {
css[c->name] = c->color | 0xFF000000; PIVariantTypes::Color col(c->color | 0xFF000000);
css_color[c->name] = col;
css_name[col] = c->name;
++c; ++c;
} }
} }

View File

@@ -26,10 +26,12 @@
class PIColorCollection { class PIColorCollection {
public: public:
static PIColorCollection & instance(); static PIColorCollection & instance();
PIVariantTypes::Color getCSS(const PIString & name) const {return css.value(name);} PIVariantTypes::Color getCSSColor(const PIString & name) const {return css_color.value(name);}
PIString getCSSName(const PIVariantTypes::Color color) const {return css_name.value(color);}
private: private:
PIColorCollection(); PIColorCollection();
PIMap<PIString, PIVariantTypes::Color> css; PIMap<PIString, PIVariantTypes::Color> css_color;
PIMap<PIVariantTypes::Color, PIString> css_name;
}; };
#endif #endif

View File

@@ -822,7 +822,7 @@ PIString PIVariant::toString() const {
case PIVariant::pivEnum: {PIVariantTypes::Enum r; ba >> r; return r.selectedName();} case PIVariant::pivEnum: {PIVariantTypes::Enum r; ba >> r; return r.selectedName();}
case PIVariant::pivFile: {PIVariantTypes::File r; ba >> r; return r.file;} case PIVariant::pivFile: {PIVariantTypes::File r; ba >> r; return r.file;}
case PIVariant::pivDir: {PIVariantTypes::Dir r; ba >> r; return r.dir;} case PIVariant::pivDir: {PIVariantTypes::Dir r; ba >> r; return r.dir;}
case PIVariant::pivColor: {PIVariantTypes::Color r; ba >> r; return r.toString();} case PIVariant::pivColor: {PIVariantTypes::Color r; ba >> r; return r.toString(true);}
case PIVariant::pivIODevice: {PIVariantTypes::IODevice r; ba >> r; return "IODevice";} // TODO case PIVariant::pivIODevice: {PIVariantTypes::IODevice r; ba >> r; return "IODevice";} // TODO
case PIVariant::pivPoint: {PIPointd r; ba >> r; return PIString::fromNumber(r.x) + ";" + PIString::fromNumber(r.y);} break; case PIVariant::pivPoint: {PIPointd r; ba >> r; return PIString::fromNumber(r.x) + ";" + PIString::fromNumber(r.y);} break;
case PIVariant::pivRect: {PIRectd r; ba >> r; return PIString::fromNumber(r.left()) + ";" + PIString::fromNumber(r.bottom()) + ";" + PIString::fromNumber(r.width()) + ";" + PIString::fromNumber(r.height());} break; case PIVariant::pivRect: {PIRectd r; ba >> r; return PIString::fromNumber(r.left()) + ";" + PIString::fromNumber(r.bottom()) + ";" + PIString::fromNumber(r.width()) + ";" + PIString::fromNumber(r.height());} break;

View File

@@ -165,10 +165,14 @@ PIVariantTypes::Color PIVariantTypes::Color::fromString(const PIString & str) {
PIString cn = str.toLowerCase().trim(); PIString cn = str.toLowerCase().trim();
if (cn.startsWith('#')) return Color(str.mid(1).toUInt(16)); if (cn.startsWith('#')) return Color(str.mid(1).toUInt(16));
if (cn.startsWith("0x")) return Color(str.mid(2).toUInt(16)); if (cn.startsWith("0x")) return Color(str.mid(2).toUInt(16));
return PIColorCollection::instance().getCSS(cn); return PIColorCollection::instance().getCSSColor(cn);
} }
PIString PIVariantTypes::Color::toString() const { PIString PIVariantTypes::Color::toString(bool find_name) const {
if (find_name) {
PIString ret = PIColorCollection::instance().getCSSName(*this);
if (ret.isNotEmpty()) return ret;
}
return "#" + PIString::fromNumber(rgba, 16); return "#" + PIString::fromNumber(rgba, 16);
} }

View File

@@ -237,15 +237,20 @@ struct PIP_EXPORT Color {
//! \~russian Возвращает цвет от #HEX, 0xHEX или имени. //! \~russian Возвращает цвет от #HEX, 0xHEX или имени.
static Color fromString(const PIString & str); static Color fromString(const PIString & str);
//! \~english Returns color as #HEX. //! \~english Returns color as #HEX, or as name if "find_name".
//! \~russian Возвращает цвет как #HEX. //! \~russian Возвращает цвет как #HEX, либо как имя если "find_name".
PIString toString() const; PIString toString(bool find_name = false) const;
//! \~english Integer color. //! \~english Integer color.
//! \~russian Целочисленный цвет. //! \~russian Целочисленный цвет.
uint rgba; uint rgba;
}; };
inline bool operator < (const Color c0, const Color c1) {return c0.rgba < c1.rgba;}
inline bool operator > (const Color c0, const Color c1) {return c0.rgba > c1.rgba;}
inline bool operator ==(const Color c0, const Color c1) {return c0.rgba == c1.rgba;}
inline bool operator !=(const Color c0, const Color c1) {return c0.rgba != c1.rgba;}
//! \addtogroup Types //! \addtogroup Types
//! \{ //! \{