summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ef76ff1)
raw | patch | inline | side by side (parent: ef76ff1)
author | joncruz <joncruz@users.sourceforge.net> | |
Fri, 20 Mar 2009 06:50:37 +0000 (06:50 +0000) | ||
committer | joncruz <joncruz@users.sourceforge.net> | |
Fri, 20 Mar 2009 06:50:37 +0000 (06:50 +0000) |
src/dialogs/CMakeLists.txt | patch | blob | history | |
src/interface.cpp | patch | blob | history | |
src/ui/dialog/CMakeLists.txt | patch | blob | history | |
src/ui/dialog/swatches.cpp | patch | blob | history | |
src/ui/dialog/swatches.h | patch | blob | history | |
src/widgets/Makefile_insert | patch | blob | history | |
src/widgets/eek-color-def.cpp | [deleted file] | patch | blob | history |
src/widgets/eek-color-def.h | [deleted file] | patch | blob | history |
src/widgets/ege-paint-def.cpp | [new file with mode: 0644] | patch | blob |
src/widgets/ege-paint-def.h | [new file with mode: 0644] | patch | blob |
index 9d2ed9eb87740cee77445b8184dfdc66f9fc96bc..4e6b1ee3de715da1c413025e3135bfbb98006ec2 100644 (file)
SET(dialogs_SRC
clonetiler.cpp
dialog-events.cpp
-eek-color-def.cpp
-eek-preview.cpp
export.cpp
extensions.cpp
fill-style.cpp
)
ADD_LIBRARY(dialogs STATIC ${dialogs_SRC})
TARGET_LINK_LIBRARIES(dialogs
-2geom ${INKSCAPE_LIBS})
\ No newline at end of file
+2geom ${INKSCAPE_LIBS})
diff --git a/src/interface.cpp b/src/interface.cpp
index c162ea6d68fef6b384672db7f72c72f1f335465f..144611c9a5950cd98c206a5984a42e0682e88695 100644 (file)
--- a/src/interface.cpp
+++ b/src/interface.cpp
#include "style.h"
#include "event-context.h"
#include "gradient-drag.h"
-#include "widgets/eek-color-def.h"
+#include "widgets/ege-paint-def.h"
// Include Mac OS X menu synchronization on native OSX build
#ifdef GDK_WINDOWING_QUARTZ
bool worked = false;
Glib::ustring colorspec;
if ( data->format == 8 ) {
- eek::ColorDef color;
+ ege::PaintDef color;
worked = color.fromMIMEData("application/x-oswb-color",
reinterpret_cast<char*>(data->data),
data->length,
data->format);
if ( worked ) {
- if ( color.getType() == eek::ColorDef::CLEAR ) {
+ if ( color.getType() == ege::PaintDef::CLEAR ) {
colorspec = ""; // TODO check if this is sufficient
- } else if ( color.getType() == eek::ColorDef::NONE ) {
+ } else if ( color.getType() == ege::PaintDef::NONE ) {
colorspec = "none";
} else {
unsigned int r = color.getR();
index 1d912cf9f9f5a63483340d7dfc9766b5fb2ce876..ea63d602334ade8c6b7af6a96ed09ab9256829a0 100644 (file)
document-metadata.cpp
document-properties.cpp
extension-editor.cpp
+eek-preview.cpp
+ege-paint-def.cpp
filedialog.cpp
filedialogimpl-gtkmm.cpp
fill-and-stroke.cpp
index 8fb811e3d205448dc2693c8a5287e07e8d1843ce..6470b3a5a0a5040043faede8f1ebb464b3669e4c 100644 (file)
namespace Dialogs {
-ColorItem::ColorItem(eek::ColorDef::ColorType type) :
+ColorItem::ColorItem(ege::PaintDef::ColorType type) :
def(type),
_isLive(false),
_linkIsTone(false),
using Inkscape::IO::Resource::ICONS;
using Inkscape::IO::Resource::SYSTEM;
- if (item->def.getType() != eek::ColorDef::RGB){
+ if (item->def.getType() != ege::PaintDef::RGB){
GError *error = NULL;
gsize bytesRead = 0;
gsize bytesWritten = 0;
@@ -444,7 +444,7 @@ Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, ::PreviewS
Gtk::Widget* newBlot = Glib::wrap(eekWidget);
eek_preview_set_color( preview, (def.getR() << 8) | def.getR(), (def.getG() << 8) | def.getG(), (def.getB() << 8) | def.getB());
- if ( def.getType() != eek::ColorDef::RGB ) {
+ if ( def.getType() != ege::PaintDef::RGB ) {
using Inkscape::IO::Resource::get_path;
using Inkscape::IO::Resource::ICONS;
using Inkscape::IO::Resource::SYSTEM;
SPCSSAttr *css = sp_repr_css_attr_new();
Glib::ustring descr;
switch (def.getType()) {
- case eek::ColorDef::CLEAR: {
+ case ege::PaintDef::CLEAR: {
// TODO actually make this clear
sp_repr_css_set_property( css, attrName, "none" );
descr = secondary? _("Remove stroke color") : _("Remove fill color");
break;
}
- case eek::ColorDef::NONE: {
+ case ege::PaintDef::NONE: {
sp_repr_css_set_property( css, attrName, "none" );
descr = secondary? _("Set stroke color to none") : _("Set fill color to none");
break;
}
- case eek::ColorDef::RGB: {
+ case ege::PaintDef::RGB: {
gchar c[64];
guint32 rgba = (def.getR() << 24) | (def.getG() << 16) | (def.getB() << 8) | 0xff;
sp_svg_write_color(c, sizeof(c), rgba);
{
Gtk::RadioMenuItem* hotItem = 0;
_holder = new PreviewHolder();
- _clear = new ColorItem( eek::ColorDef::CLEAR );
- _remove = new ColorItem( eek::ColorDef::NONE );
+ _clear = new ColorItem( ege::PaintDef::CLEAR );
+ _remove = new ColorItem( ege::PaintDef::NONE );
{
JustForNow *docPalette = new JustForNow();
index ed311242e7e7fc35280f5868e5b10ae13e6a1569..8b83e1450e666d4fc41e2dc84dafe4e3abd0680b 100644 (file)
--- a/src/ui/dialog/swatches.h
+++ b/src/ui/dialog/swatches.h
#include "ui/widget/panel.h"
#include "ui/previewholder.h"
-#include "widgets/eek-color-def.h"
+#include "widgets/ege-paint-def.h"
namespace Inkscape {
namespace UI {
{
friend void _loadPaletteFile( gchar const *filename );
public:
- ColorItem( eek::ColorDef::ColorType type );
+ ColorItem( ege::PaintDef::ColorType type );
ColorItem( unsigned int r, unsigned int g, unsigned int b,
Glib::ustring& name );
virtual ~ColorItem();
::PreviewSize size,
guint ratio);
void buttonClicked(bool secondary = false);
- eek::ColorDef def;
+ ege::PaintDef def;
private:
static void _dropDataIn( GtkWidget *widget,
index 13f2b33eb56c3e37e09d75e42b52405007f97125..08b2433eafd5fbe2e89e4d6a1110cbfe1337b535 100644 (file)
widgets/dash-selector.h \
widgets/desktop-widget.cpp \
widgets/desktop-widget.h \
- widgets/eek-color-def.cpp \
- widgets/eek-color-def.h \
widgets/eek-preview.cpp \
widgets/eek-preview.h \
+ widgets/ege-paint-def.cpp \
+ widgets/ege-paint-def.h \
widgets/fill-style.cpp \
widgets/fill-style.h \
widgets/font-selector.cpp \
diff --git a/src/widgets/eek-color-def.cpp b/src/widgets/eek-color-def.cpp
+++ /dev/null
@@ -1,328 +0,0 @@
-/** @file
- * @brief EEK color definition
- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Eek Color Definition.
- *
- * The Initial Developer of the Original Code is
- * Jon A. Cruz.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#include "config.h"
-
-#ifdef HAVE_LIBINTL_H
-#include <libintl.h>
-#endif
-
-#include <stdint.h>
-#include <string>
-#include <iostream>
-#include <sstream>
-#include <stdlib.h>
-#include <string.h>
-
-#if !defined(_)
-#define _(s) gettext(s)
-#endif // !defined(_)
-
-#include "eek-color-def.h"
-
-namespace eek
-{
-
-static std::string mimeTEXT("text/plain");
-static std::string mimeX_COLOR("application/x-color");
-static std::string mimeOSWB_COLOR("application/x-oswb-color");
-
-static std::string doubleToStr(double d);
-
-ColorDef::ColorDef() :
- descr(_("none")),
- type(NONE),
- r(0),
- g(0),
- b(0),
- editable(false)
-{
-}
-
-ColorDef::ColorDef( ColorType type ) :
- descr(),
- type(type),
- r(0),
- g(0),
- b(0),
- editable(false)
-{
- switch (type) {
- case CLEAR:
- descr = _("remove");
- break;
- case NONE:
- descr = _("none");
- break;
- case RGB:
- descr = "";
- break;
- }
-}
-
-ColorDef::ColorDef( unsigned int r, unsigned int g, unsigned int b, const std::string& description ) :
- descr(description),
- type(RGB),
- r(r),
- g(g),
- b(b),
- editable(false)
-{
-}
-
-ColorDef::~ColorDef()
-{
-}
-
-ColorDef::ColorDef( ColorDef const &other )
-{
- if ( this != &other ) {
- *this = other;
- }
-}
-
-ColorDef& ColorDef::operator=( ColorDef const &other )
-{
- if ( this != & other )
- {
- type = other.type;
- r = other.r;
- g = other.g;
- b = other.b;
- descr = other.descr;
- editable = other.editable;
- }
- return *this;
-}
-
-class ColorDef::HookData {
-public:
- HookData( ColorCallback cb, void* data ) {_cb = cb; _data = data;}
- ColorCallback _cb;
- void* _data;
-};
-
-
-std::vector<std::string> ColorDef::getMIMETypes()
-{
- std::vector<std::string> listing;
- listing.push_back(mimeOSWB_COLOR);
- listing.push_back(mimeX_COLOR);
- listing.push_back(mimeTEXT);
- return listing;
-}
-
-void ColorDef::getMIMEData(std::string const & type, char*& dest, int& len, int& format)
-{
- if ( type == mimeTEXT ) {
- dest = new char[8];
- snprintf( dest, 8, "#%02x%02x%02x", getR(), getG(), getB() );
- dest[7] = 0;
- len = 8;
- format = 8;
- } else if ( type == mimeX_COLOR ) {
- uint16_t* tmp = new uint16_t[4];
- tmp[0] = (getR() << 8) | getR();
- tmp[1] = (getG() << 8) | getG();
- tmp[2] = (getB() << 8) | getB();
- tmp[3] = 0xffff;
- dest = reinterpret_cast<char*>(tmp);
- len = 8;
- format = 16;
- } else if ( type == mimeOSWB_COLOR ) {
- std::string tmp("<paint>");
- switch ( getType() ) {
- case eek::ColorDef::NONE:
- {
- tmp += "<nocolor/>";
- }
- break;
- case eek::ColorDef::CLEAR:
- {
- tmp += "<clear/>";
- }
- break;
- default:
- {
- tmp += std::string("<color name=\"") + descr + "\">";
- tmp += "<sRGB r=\"";
- tmp += doubleToStr(getR()/255.0);
- tmp += "\" g=\"";
- tmp += doubleToStr(getG()/255.0);
- tmp += "\" b=\"";
- tmp += doubleToStr(getB()/255.0);
- tmp += "\"/>";
- tmp += "</color>";
- }
- }
- tmp += "</paint>";
- len = tmp.size();
- dest = new char[len];
- // Note that this is not null-terminated:
- memcpy(dest, tmp.c_str(), len);
- format = 8;
- } else {
- // nothing
- dest = 0;
- len = 0;
- }
-}
-
-bool ColorDef::fromMIMEData(std::string const & type, char const * data, int len, int /*format*/)
-{
- bool worked = false;
- bool changed = false;
- if ( type == mimeTEXT ) {
- } else if ( type == mimeX_COLOR ) {
- } else if ( type == mimeOSWB_COLOR ) {
- std::string xml(data, len);
- if ( xml.find("<nocolor/>") != std::string::npos ) {
- if ( (this->type != eek::ColorDef::NONE)
- || (this->r != 0)
- || (this->g != 0)
- || (this->b != 0) ) {
- this->type = eek::ColorDef::NONE;
- this->r = 0;
- this->g = 0;
- this->b = 0;
- changed = true;
- }
- worked = true;
- } else {
- size_t pos = xml.find("<sRGB");
- if ( pos != std::string::npos ) {
- size_t endPos = xml.find(">", pos);
- std::string srgb = xml.substr(pos, endPos);
- this->type = eek::ColorDef::RGB;
- size_t numPos = srgb.find("r=");
- if (numPos != std::string::npos) {
- char* endPtr = 0;
- double dbl = strtod(srgb.c_str() + numPos + 3, &endPtr);
- this->r = static_cast<int>(255 * dbl);
- }
- numPos = srgb.find("g=");
- if (numPos != std::string::npos) {
- char* endPtr = 0;
- double dbl = strtod(srgb.c_str() + numPos + 3, &endPtr);
- this->g = static_cast<int>(255 * dbl);
- }
- numPos = srgb.find("b=");
- if (numPos != std::string::npos) {
- char* endPtr = 0;
- double dbl = strtod(srgb.c_str() + numPos + 3, &endPtr);
- this->b = static_cast<int>(255 * dbl);
- }
-
- size_t pos = xml.find("<color ");
- if ( pos != std::string::npos ) {
- size_t endPos = xml.find(">", pos);
- std::string colorTag = xml.substr(pos, endPos);
-
- size_t namePos = colorTag.find("name=");
- if (namePos != std::string::npos) {
- char quote = colorTag[namePos + 5];
- endPos = colorTag.find(quote, namePos + 6);
- descr = colorTag.substr(namePos + 6, endPos - (namePos + 6));
- }
- }
- changed = true;
- worked = true;
- }
- }
- }
- if ( changed ) {
- // beware of callbacks changing things
- for ( std::vector<HookData*>::iterator it = _listeners.begin(); it != _listeners.end(); ++it )
- {
- if ( (*it)->_cb )
- {
- (*it)->_cb( (*it)->_data );
- }
- }
- }
- return worked;
-}
-
-void ColorDef::setRGB( unsigned int r, unsigned int g, unsigned int b )
-{
- if ( r != this->r || g != this->g || b != this->b ) {
- this->r = r;
- this->g = g;
- this->b = b;
-
- // beware of callbacks changing things
- for ( std::vector<HookData*>::iterator it = _listeners.begin(); it != _listeners.end(); ++it )
- {
- if ( (*it)->_cb )
- {
- (*it)->_cb( (*it)->_data );
- }
- }
- }
-}
-
-void ColorDef::addCallback( ColorCallback cb, void* data )
-{
- _listeners.push_back( new HookData(cb, data) );
-}
-
-void ColorDef::removeCallback( ColorCallback /*cb*/, void* /*data*/ )
-{
-}
-
-static std::string doubleToStr(double d)
-{
- // TODO ensure "." is used for decimal separator.
- std::stringstream out;
- out << d;
- return out.str();
-}
-
-} // namespace eek
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/widgets/eek-color-def.h b/src/widgets/eek-color-def.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/** @file
- * @brief EEK color definition
- */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Eek Color Definition.
- *
- * The Initial Developer of the Original Code is
- * Jon A. Cruz.
- * Portions created by the Initial Developer are Copyright (C) 2006
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-#ifndef SEEN_EEK_COLOR_DEF_H
-#define SEEN_EEK_COLOR_DEF_H
-
-#include <string>
-#include <vector>
-
-namespace eek
-{
-
-typedef void (*ColorCallback)( void* data );
-
-
-class ColorDef
-{
-public:
- enum ColorType{CLEAR, NONE, RGB};
-
- ColorDef();
- ColorDef(ColorType type);
- ColorDef( unsigned int r, unsigned int g, unsigned int b, const std::string& description );
- virtual ~ColorDef();
-
- ColorDef( ColorDef const &other );
- virtual ColorDef& operator=( ColorDef const &other );
-
- ColorType getType() const { return type; }
-
- std::vector<std::string> getMIMETypes();
- void getMIMEData(std::string const & type, char*& dest, int& len, int& format);
- bool fromMIMEData(std::string const & type, char const * data, int len, int format);
-
- void setRGB( unsigned int r, unsigned int g, unsigned int b );
- unsigned int getR() const { return r; }
- unsigned int getG() const { return g; }
- unsigned int getB() const { return b; }
-
- void addCallback( ColorCallback cb, void* data );
- void removeCallback( ColorCallback cb, void* data );
-
- bool isEditable() const { return editable; }
- void setEditable( bool edit ) { editable = edit; }
-
- std::string descr;
-
-protected:
- ColorType type;
- unsigned int r;
- unsigned int g;
- unsigned int b;
- bool editable;
-
-private:
- class HookData;
-
- std::vector<HookData*> _listeners;
-};
-
-
-} // namespace eek
-
-#endif // SEEN_EEK_COLOR_DEF_H
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/widgets/ege-paint-def.cpp b/src/widgets/ege-paint-def.cpp
--- /dev/null
@@ -0,0 +1,328 @@
+/** @file
+ * @brief EGE paint definition
+ */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Eek Color Definition.
+ *
+ * The Initial Developer of the Original Code is
+ * Jon A. Cruz.
+ * Portions created by the Initial Developer are Copyright (C) 2006
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "config.h"
+
+#ifdef HAVE_LIBINTL_H
+#include <libintl.h>
+#endif
+
+#include <stdint.h>
+#include <string>
+#include <iostream>
+#include <sstream>
+#include <stdlib.h>
+#include <string.h>
+
+#if !defined(_)
+#define _(s) gettext(s)
+#endif // !defined(_)
+
+#include "ege-paint-def.h"
+
+namespace ege
+{
+
+static std::string mimeTEXT("text/plain");
+static std::string mimeX_COLOR("application/x-color");
+static std::string mimeOSWB_COLOR("application/x-oswb-color");
+
+static std::string doubleToStr(double d);
+
+PaintDef::PaintDef() :
+ descr(_("none")),
+ type(NONE),
+ r(0),
+ g(0),
+ b(0),
+ editable(false)
+{
+}
+
+PaintDef::PaintDef( ColorType type ) :
+ descr(),
+ type(type),
+ r(0),
+ g(0),
+ b(0),
+ editable(false)
+{
+ switch (type) {
+ case CLEAR:
+ descr = _("remove");
+ break;
+ case NONE:
+ descr = _("none");
+ break;
+ case RGB:
+ descr = "";
+ break;
+ }
+}
+
+PaintDef::PaintDef( unsigned int r, unsigned int g, unsigned int b, const std::string& description ) :
+ descr(description),
+ type(RGB),
+ r(r),
+ g(g),
+ b(b),
+ editable(false)
+{
+}
+
+PaintDef::~PaintDef()
+{
+}
+
+PaintDef::PaintDef( PaintDef const &other )
+{
+ if ( this != &other ) {
+ *this = other;
+ }
+}
+
+PaintDef& PaintDef::operator=( PaintDef const &other )
+{
+ if ( this != & other )
+ {
+ type = other.type;
+ r = other.r;
+ g = other.g;
+ b = other.b;
+ descr = other.descr;
+ editable = other.editable;
+ }
+ return *this;
+}
+
+class PaintDef::HookData {
+public:
+ HookData( ColorCallback cb, void* data ) {_cb = cb; _data = data;}
+ ColorCallback _cb;
+ void* _data;
+};
+
+
+std::vector<std::string> PaintDef::getMIMETypes()
+{
+ std::vector<std::string> listing;
+ listing.push_back(mimeOSWB_COLOR);
+ listing.push_back(mimeX_COLOR);
+ listing.push_back(mimeTEXT);
+ return listing;
+}
+
+void PaintDef::getMIMEData(std::string const & type, char*& dest, int& len, int& format)
+{
+ if ( type == mimeTEXT ) {
+ dest = new char[8];
+ snprintf( dest, 8, "#%02x%02x%02x", getR(), getG(), getB() );
+ dest[7] = 0;
+ len = 8;
+ format = 8;
+ } else if ( type == mimeX_COLOR ) {
+ uint16_t* tmp = new uint16_t[4];
+ tmp[0] = (getR() << 8) | getR();
+ tmp[1] = (getG() << 8) | getG();
+ tmp[2] = (getB() << 8) | getB();
+ tmp[3] = 0xffff;
+ dest = reinterpret_cast<char*>(tmp);
+ len = 8;
+ format = 16;
+ } else if ( type == mimeOSWB_COLOR ) {
+ std::string tmp("<paint>");
+ switch ( getType() ) {
+ case ege::PaintDef::NONE:
+ {
+ tmp += "<nocolor/>";
+ }
+ break;
+ case ege::PaintDef::CLEAR:
+ {
+ tmp += "<clear/>";
+ }
+ break;
+ default:
+ {
+ tmp += std::string("<color name=\"") + descr + "\">";
+ tmp += "<sRGB r=\"";
+ tmp += doubleToStr(getR()/255.0);
+ tmp += "\" g=\"";
+ tmp += doubleToStr(getG()/255.0);
+ tmp += "\" b=\"";
+ tmp += doubleToStr(getB()/255.0);
+ tmp += "\"/>";
+ tmp += "</color>";
+ }
+ }
+ tmp += "</paint>";
+ len = tmp.size();
+ dest = new char[len];
+ // Note that this is not null-terminated:
+ memcpy(dest, tmp.c_str(), len);
+ format = 8;
+ } else {
+ // nothing
+ dest = 0;
+ len = 0;
+ }
+}
+
+bool PaintDef::fromMIMEData(std::string const & type, char const * data, int len, int /*format*/)
+{
+ bool worked = false;
+ bool changed = false;
+ if ( type == mimeTEXT ) {
+ } else if ( type == mimeX_COLOR ) {
+ } else if ( type == mimeOSWB_COLOR ) {
+ std::string xml(data, len);
+ if ( xml.find("<nocolor/>") != std::string::npos ) {
+ if ( (this->type != ege::PaintDef::NONE)
+ || (this->r != 0)
+ || (this->g != 0)
+ || (this->b != 0) ) {
+ this->type = ege::PaintDef::NONE;
+ this->r = 0;
+ this->g = 0;
+ this->b = 0;
+ changed = true;
+ }
+ worked = true;
+ } else {
+ size_t pos = xml.find("<sRGB");
+ if ( pos != std::string::npos ) {
+ size_t endPos = xml.find(">", pos);
+ std::string srgb = xml.substr(pos, endPos);
+ this->type = ege::PaintDef::RGB;
+ size_t numPos = srgb.find("r=");
+ if (numPos != std::string::npos) {
+ char* endPtr = 0;
+ double dbl = strtod(srgb.c_str() + numPos + 3, &endPtr);
+ this->r = static_cast<int>(255 * dbl);
+ }
+ numPos = srgb.find("g=");
+ if (numPos != std::string::npos) {
+ char* endPtr = 0;
+ double dbl = strtod(srgb.c_str() + numPos + 3, &endPtr);
+ this->g = static_cast<int>(255 * dbl);
+ }
+ numPos = srgb.find("b=");
+ if (numPos != std::string::npos) {
+ char* endPtr = 0;
+ double dbl = strtod(srgb.c_str() + numPos + 3, &endPtr);
+ this->b = static_cast<int>(255 * dbl);
+ }
+
+ size_t pos = xml.find("<color ");
+ if ( pos != std::string::npos ) {
+ size_t endPos = xml.find(">", pos);
+ std::string colorTag = xml.substr(pos, endPos);
+
+ size_t namePos = colorTag.find("name=");
+ if (namePos != std::string::npos) {
+ char quote = colorTag[namePos + 5];
+ endPos = colorTag.find(quote, namePos + 6);
+ descr = colorTag.substr(namePos + 6, endPos - (namePos + 6));
+ }
+ }
+ changed = true;
+ worked = true;
+ }
+ }
+ }
+ if ( changed ) {
+ // beware of callbacks changing things
+ for ( std::vector<HookData*>::iterator it = _listeners.begin(); it != _listeners.end(); ++it )
+ {
+ if ( (*it)->_cb )
+ {
+ (*it)->_cb( (*it)->_data );
+ }
+ }
+ }
+ return worked;
+}
+
+void PaintDef::setRGB( unsigned int r, unsigned int g, unsigned int b )
+{
+ if ( r != this->r || g != this->g || b != this->b ) {
+ this->r = r;
+ this->g = g;
+ this->b = b;
+
+ // beware of callbacks changing things
+ for ( std::vector<HookData*>::iterator it = _listeners.begin(); it != _listeners.end(); ++it )
+ {
+ if ( (*it)->_cb )
+ {
+ (*it)->_cb( (*it)->_data );
+ }
+ }
+ }
+}
+
+void PaintDef::addCallback( ColorCallback cb, void* data )
+{
+ _listeners.push_back( new HookData(cb, data) );
+}
+
+void PaintDef::removeCallback( ColorCallback /*cb*/, void* /*data*/ )
+{
+}
+
+static std::string doubleToStr(double d)
+{
+ // TODO ensure "." is used for decimal separator.
+ std::stringstream out;
+ out << d;
+ return out.str();
+}
+
+} // namespace ege
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/widgets/ege-paint-def.h b/src/widgets/ege-paint-def.h
--- /dev/null
@@ -0,0 +1,111 @@
+/** @file
+ * @brief EGE paint definition
+ */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Eek Color Definition.
+ *
+ * The Initial Developer of the Original Code is
+ * Jon A. Cruz.
+ * Portions created by the Initial Developer are Copyright (C) 2006
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef SEEN_EGE_PAINT_DEF_H
+#define SEEN_EGE_PAINT_DEF_H
+
+#include <string>
+#include <vector>
+
+namespace ege
+{
+
+typedef void (*ColorCallback)( void* data );
+
+
+class PaintDef
+{
+public:
+ enum ColorType{CLEAR, NONE, RGB};
+
+ PaintDef();
+ PaintDef(ColorType type);
+ PaintDef( unsigned int r, unsigned int g, unsigned int b, const std::string& description );
+ virtual ~PaintDef();
+
+ PaintDef( PaintDef const &other );
+ virtual PaintDef& operator=( PaintDef const &other );
+
+ ColorType getType() const { return type; }
+
+ std::vector<std::string> getMIMETypes();
+ void getMIMEData(std::string const & type, char*& dest, int& len, int& format);
+ bool fromMIMEData(std::string const & type, char const * data, int len, int format);
+
+ void setRGB( unsigned int r, unsigned int g, unsigned int b );
+ unsigned int getR() const { return r; }
+ unsigned int getG() const { return g; }
+ unsigned int getB() const { return b; }
+
+ void addCallback( ColorCallback cb, void* data );
+ void removeCallback( ColorCallback cb, void* data );
+
+ bool isEditable() const { return editable; }
+ void setEditable( bool edit ) { editable = edit; }
+
+ std::string descr;
+
+protected:
+ ColorType type;
+ unsigned int r;
+ unsigned int g;
+ unsigned int b;
+ bool editable;
+
+private:
+ class HookData;
+
+ std::vector<HookData*> _listeners;
+};
+
+
+} // namespace ege
+
+#endif // SEEN_EGE_PAINT_DEF_H
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :