Merge branch 'zelgadis_master'
authorCarlos Lopez <genetita@gmail.com>
Wed, 14 Apr 2010 17:14:28 +0000 (19:14 +0200)
committerCarlos Lopez <genetita@gmail.com>
Wed, 14 Apr 2010 17:14:28 +0000 (19:14 +0200)
synfig-core/src/modules/mod_svg/svg_parser.cpp
synfig-core/src/modules/mod_svg/svg_parser.h
synfig-studio/src/gtkmm/mod_palette/dock_paledit.cpp
synfig-studio/src/gtkmm/mod_palette/dock_paledit.h
synfig-studio/src/gtkmm/widget_color.cpp
synfig-studio/src/gtkmm/widget_color.h

index 680aa4f..18e66b4 100644 (file)
@@ -32,6 +32,7 @@
 #endif
 
 #include <iostream>
+#include <cstring>
 #include "svg_parser.h"
 
 /* === U S I N G =========================================================== */
@@ -1780,7 +1781,7 @@ Svg_parser::get_tokens_path(String path){ //mini path lexico-parser
                                        else if(a=='V'){ e=15; i++;}
                                        else if(a=='H'){ e=16; i++;}
                                        else if(a=='z' || a=='Z'){ e=17; i++;}
-                                       else if(a=='-' ||a=='.'|| isdigit (a)){ e=18;}
+                                       else if(a=='-' || a=='.' || a=='e' || a=='E' || isdigit (a)){ e=18;}
                                        else if(a==','){ e=19; i++;}
                                        else if(a==' '){i++;}
                                        break;
@@ -1804,7 +1805,7 @@ Svg_parser::get_tokens_path(String path){ //mini path lexico-parser
                        case 16: tokens.push_back("H"); e=0; break;
 
                        case 17: tokens.push_back("z"); e=0; break;//loop
-                       case 18: if(a=='-'||a=='.'|| isdigit (a)){
+                       case 18: if(a=='-' || a=='.' || a=='e' || a=='E' || isdigit (a)){
                                                buffer.append(path.substr(i,1));i++;
                                        }else{
                                                e=20;
@@ -1853,6 +1854,8 @@ Svg_parser::randomLetter(){
 int
 Svg_parser::getRed(String hex){
        if(hex.at(0)=='#'){
+               //allow for 3-digit hex codes (#rgb = #rrggbb)
+               if (hex.length()<7) return (16+1) * hextodec(hex.substr(1,1));
                return hextodec(hex.substr(1,2));
        }else if(hex.compare(0,3,"rgb")==0 || hex.compare(0,3,"RGB")==0){
                int start=hex.find_first_of("(")+1;
@@ -1860,11 +1863,12 @@ Svg_parser::getRed(String hex){
                String aux=tokenize(hex.substr(start,end-start),",").at(0);
                return atoi(aux.data());
        }
-       return 0;
+       return getColor(hex,1);
 }
 int
 Svg_parser::getGreen(String hex){
        if(hex.at(0)=='#'){
+               if (hex.length()<7) return (16+1) * hextodec(hex.substr(2,1));
                return hextodec(hex.substr(3,2));
        }else if(hex.compare(0,3,"rgb")==0 || hex.compare(0,3,"RGB")==0){
                int start=hex.find_first_of("(")+1;
@@ -1872,11 +1876,12 @@ Svg_parser::getGreen(String hex){
                String aux=tokenize(hex.substr(start,end-start),",").at(1);
                return atoi(aux.data());
        }
-       return 0;
+       return getColor(hex,2);
 }
 int
 Svg_parser::getBlue(String hex){
        if(hex.at(0)=='#'){
+               if (hex.length()<7) return (16+1) * hextodec(hex.substr(3,1));
                return hextodec(hex.substr(5,2));
        }else if(hex.compare(0,3,"rgb")==0 || hex.compare(0,3,"RGB")==0){
                int start=hex.find_first_of("(")+1;
@@ -1884,7 +1889,7 @@ Svg_parser::getBlue(String hex){
                String aux=tokenize(hex.substr(start,end-start),",").at(2);
                return atoi(aux.data());
        }
-       return 0;
+       return getColor(hex,3);
 }
 int
 Svg_parser::hextodec(String hex){
@@ -2017,3 +2022,161 @@ Svg_parser::new_guid(){
        return GUID::hasher(uid).get_string();
 }
 
+
+#define COLOR_NAME(color, r, g, b) else if(name.compare(0,strlen(color),color)==0) \
+                   {switch(position) \
+                              {case 1: return r; case 2: return g; case 3: return b;}  }
+
+int
+Svg_parser::getColor(String name, int position){
+       if (position<1 || position>3) return 0;
+       COLOR_NAME("aliceblue",240, 248, 255)
+       COLOR_NAME("antiquewhite",250, 235, 215)
+       COLOR_NAME("aqua", 0, 255, 255)
+       COLOR_NAME("aquamarine",127, 255, 212)
+       COLOR_NAME("azure",240, 255, 255)
+       COLOR_NAME("beige",245, 245, 220)
+       COLOR_NAME("bisque",255, 228, 196)
+       COLOR_NAME("black", 0, 0, 0)
+       COLOR_NAME("blanchedalmond",255, 235, 205)
+       COLOR_NAME("blue", 0, 0, 255)
+       COLOR_NAME("blueviolet",138, 43, 226)
+       COLOR_NAME("brown",165, 42, 42)
+       COLOR_NAME("burlywood",222, 184, 135)
+       COLOR_NAME("cadetblue", 95, 158, 160)
+       COLOR_NAME("chartreuse",127, 255, 0)
+       COLOR_NAME("chocolate",210, 105, 30)
+       COLOR_NAME("coral",255, 127, 80)
+       COLOR_NAME("cornflowerblue",100, 149, 237)
+       COLOR_NAME("cornsilk",255, 248, 220)
+       COLOR_NAME("crimson",220, 20, 60)
+       COLOR_NAME("cyan", 0, 255, 255)
+       COLOR_NAME("darkblue", 0, 0, 139)
+       COLOR_NAME("darkcyan", 0, 139, 139)
+       COLOR_NAME("darkgoldenrod",184, 134, 11)
+       COLOR_NAME("darkgray",169, 169, 169)
+       COLOR_NAME("darkgreen", 0, 100, 0)
+       COLOR_NAME("darkgrey",169, 169, 169)
+       COLOR_NAME("darkkhaki",189, 183, 107)
+       COLOR_NAME("darkmagenta",139, 0, 139)
+       COLOR_NAME("darkolivegreen", 85, 107, 47)
+       COLOR_NAME("darkorange",255, 140, 0)
+       COLOR_NAME("darkorchid",153, 50, 204)
+       COLOR_NAME("darkred",139, 0, 0)
+       COLOR_NAME("darksalmon",233, 150, 122)
+       COLOR_NAME("darkseagreen",143, 188, 143)
+       COLOR_NAME("darkslateblue", 72, 61, 139)
+       COLOR_NAME("darkslategray", 47, 79, 79)
+       COLOR_NAME("darkslategrey", 47, 79, 79)
+       COLOR_NAME("darkturquoise", 0, 206, 209)
+       COLOR_NAME("darkviolet",148, 0, 211)
+       COLOR_NAME("deeppink",255, 20, 147)
+       COLOR_NAME("deepskyblue", 0, 191, 255)
+       COLOR_NAME("dimgray",105, 105, 105)
+       COLOR_NAME("dimgrey",105, 105, 105)
+       COLOR_NAME("dodgerblue", 30, 144, 255)
+       COLOR_NAME("firebrick",178, 34, 34)
+       COLOR_NAME("floralwhite",255, 250, 240)
+       COLOR_NAME("forestgreen", 34, 139, 34)
+       COLOR_NAME("fuchsia",255, 0, 255)
+       COLOR_NAME("gainsboro",220, 220, 220)
+       COLOR_NAME("ghostwhite",248, 248, 255)
+       COLOR_NAME("gold",255, 215, 0)
+       COLOR_NAME("goldenrod",218, 165, 32)
+       COLOR_NAME("gray",128, 128, 128)
+       COLOR_NAME("grey",128, 128, 128)
+       COLOR_NAME("green", 0, 128, 0)
+       COLOR_NAME("greenyellow",173, 255, 47)
+       COLOR_NAME("honeydew",240, 255, 240)
+       COLOR_NAME("hotpink",255, 105, 180)
+       COLOR_NAME("indianred",205, 92, 92)
+       COLOR_NAME("indigo", 75, 0, 130)
+       COLOR_NAME("ivory",255, 255, 240)
+       COLOR_NAME("khaki",240, 230, 140)
+       COLOR_NAME("lavender",230, 230, 250)
+       COLOR_NAME("lavenderblush",255, 240, 245)
+       COLOR_NAME("lawngreen",124, 252, 0)
+       COLOR_NAME("lemonchiffon",255, 250, 205)
+       COLOR_NAME("lightblue",173, 216, 230)
+       COLOR_NAME("lightcoral",240, 128, 128)
+       COLOR_NAME("lightcyan",224, 255, 255)
+       COLOR_NAME("lightgoldenrodyellow",250, 250, 210)
+       COLOR_NAME("lightgray",211, 211, 211)
+       COLOR_NAME("lightgreen",144, 238, 144)
+       COLOR_NAME("lightgrey",211, 211, 211)
+       COLOR_NAME("lightpink",255, 182, 193)
+       COLOR_NAME("lightsalmon",255, 160, 122)
+       COLOR_NAME("lightseagreen", 32, 178, 170)
+       COLOR_NAME("lightskyblue",135, 206, 250)
+       COLOR_NAME("lightslategray",119, 136, 153)
+       COLOR_NAME("lightslategrey",119, 136, 153)
+       COLOR_NAME("lightsteelblue",176, 196, 222)
+       COLOR_NAME("lightyellow",255, 255, 224)
+       COLOR_NAME("lime", 0, 255, 0)
+       COLOR_NAME("limegreen", 50, 205, 50)
+       COLOR_NAME("linen",250, 240, 230)
+       COLOR_NAME("magenta",255, 0, 255)
+       COLOR_NAME("maroon",128, 0, 0)
+       COLOR_NAME("mediumaquamarine",102, 205, 170)
+       COLOR_NAME("mediumblue", 0, 0, 205)
+       COLOR_NAME("mediumorchid",186, 85, 211)
+       COLOR_NAME("mediumpurple",147, 112, 219)
+       COLOR_NAME("mediumseagreen", 60, 179, 113)
+       COLOR_NAME("mediumslateblue",123, 104, 238)
+       COLOR_NAME("mediumspringgreen", 0, 250, 154)
+       COLOR_NAME("mediumturquoise", 72, 209, 204)
+       COLOR_NAME("mediumvioletred",199, 21, 133)
+       COLOR_NAME("midnightblue", 25, 25, 112)
+       COLOR_NAME("mintcream",245, 255, 250)
+       COLOR_NAME("mistyrose",255, 228, 225)
+       COLOR_NAME("moccasin",255, 228, 181)
+       COLOR_NAME("navajowhite",255, 222, 173)
+       COLOR_NAME("navy", 0, 0, 128)
+       COLOR_NAME("oldlace",253, 245, 230)
+       COLOR_NAME("olive",128, 128, 0)
+       COLOR_NAME("olivedrab",107, 142, 35)
+       COLOR_NAME("orange",255, 165, 0)
+       COLOR_NAME("orangered",255, 69, 0)
+       COLOR_NAME("orchid",218, 112, 214)
+       COLOR_NAME("palegoldenrod",238, 232, 170)
+       COLOR_NAME("palegreen",152, 251, 152)
+       COLOR_NAME("paleturquoise",175, 238, 238)
+       COLOR_NAME("palevioletred",219, 112, 147)
+       COLOR_NAME("papayawhip",255, 239, 213)
+       COLOR_NAME("peachpuff",255, 218, 185)
+       COLOR_NAME("peru",205, 133, 63)
+       COLOR_NAME("pink",255, 192, 203)
+       COLOR_NAME("plum",221, 160, 221)
+       COLOR_NAME("powderblue",176, 224, 230)
+       COLOR_NAME("purple",128, 0, 128)
+       COLOR_NAME("red",255, 0, 0)
+       COLOR_NAME("rosybrown",188, 143, 143)
+       COLOR_NAME("royalblue", 65, 105, 225)
+       COLOR_NAME("saddlebrown",139, 69, 19)
+       COLOR_NAME("salmon",250, 128, 114)
+       COLOR_NAME("sandybrown",244, 164, 96)
+       COLOR_NAME("seagreen", 46, 139, 87)
+       COLOR_NAME("seashell",255, 245, 238)
+       COLOR_NAME("sienna",160, 82, 45)
+       COLOR_NAME("silver",192, 192, 192)
+       COLOR_NAME("skyblue",135, 206, 235)
+       COLOR_NAME("slateblue",106, 90, 205)
+       COLOR_NAME("slategray",112, 128, 144)
+       COLOR_NAME("slategrey",112, 128, 144)
+       COLOR_NAME("snow",255, 250, 250)
+       COLOR_NAME("springgreen", 0, 255, 127)
+       COLOR_NAME("steelblue", 70, 130, 180)
+       COLOR_NAME("tan",210, 180, 140)
+       COLOR_NAME("teal", 0, 128, 128)
+       COLOR_NAME("thistle",216, 191, 216)
+       COLOR_NAME("tomato",255, 99, 71)
+       COLOR_NAME("turquoise", 64, 224, 208)
+       COLOR_NAME("violet",238, 130, 238)
+       COLOR_NAME("wheat",245, 222, 179)
+       COLOR_NAME("white",255, 255, 255)
+       COLOR_NAME("whitesmoke",245, 245, 245)
+       COLOR_NAME("yellow",255, 255, 0)
+       COLOR_NAME("yellowgreen",154, 205, 50)
+       return 0;
+}
+#undef COLOR_NAME
index 6402f69..3ac8f9b 100644 (file)
@@ -65,13 +65,13 @@ typedef struct stop_t{
         float pos;
 }ColorStop;
 typedef struct linear_g{
-       char name[40];
+       char name[80];
        float x1,x2,y1,y2;
        std::list<ColorStop*> *stops;
        Matrix *transform;
 }LinearGradient;
 typedef struct radial_g{
-       char name[40];
+       char name[80];
        float cx,cy;//center point
        //float fx,fy; //not supported by Synfig
        float r; //radius
@@ -213,6 +213,7 @@ private:
                int getGreen(String hex);
                int getBlue(String hex);
                int hextodec(String hex);
+               int getColor(String name, int position);
                float getDimension(const String ac);
                //string functions
                void removeS(String *input);
index 03553e0..718bdee 100644 (file)
@@ -261,11 +261,17 @@ Dock_PalEdit::refresh()
                widget_color->set_size_request(12,12);
                widget_color->signal_activate().connect(
                        sigc::bind(
-                               sigc::mem_fun(*this,&studio::Dock_PalEdit::select_color),
+                               sigc::mem_fun(*this,&studio::Dock_PalEdit::select_fill_color),
                                i
                        )
                );
-               widget_color->signal_secondary().connect(
+               widget_color->signal_middle_click().connect(
+                       sigc::bind(
+                               sigc::mem_fun(*this,&studio::Dock_PalEdit::select_outline_color),
+                               i
+                       )
+               );
+               widget_color->signal_right_click().connect(
                        sigc::bind(
                                sigc::mem_fun(*this,&studio::Dock_PalEdit::show_menu),
                                i
@@ -294,7 +300,13 @@ Dock_PalEdit::edit_color(int i)
 }
 
 void
-Dock_PalEdit::select_color(int i)
+Dock_PalEdit::select_fill_color(int i)
+{
+       synfigapp::Main::set_fill_color(get_color(i));
+}
+
+void
+Dock_PalEdit::select_outline_color(int i)
 {
        synfigapp::Main::set_outline_color(get_color(i));
 }
index 4c1ef2e..cd825ee 100644 (file)
@@ -87,7 +87,8 @@ private:
        void set_color(synfig::Color x, int i);
        void erase_color(int i);
 
-       void select_color(int i);
+       void select_fill_color(int i);
+       void select_outline_color(int i);
        synfig::Color get_color(int i)const;
        void edit_color(int i);
 public:
index 2e009b1..1c53b5e 100644 (file)
@@ -168,9 +168,14 @@ Widget_Color::on_event(GdkEvent *event)
                        signal_activate_();
                        return true;
                }
+               if(event->button.button==2)
+               {
+                       signal_middle_click_();
+                       return true;
+               }
                if(event->button.button==3)
                {
-                       signal_secondary_();
+                       signal_right_click_();
                        return true;
                }
                break;
index 5763bc0..14e3db1 100644 (file)
@@ -52,14 +52,16 @@ class Widget_Color : public Gtk::DrawingArea
        synfig::Color color;
 
        sigc::signal<void> signal_activate_;
-       sigc::signal<void> signal_secondary_;
+       sigc::signal<void> signal_middle_click_;
+       sigc::signal<void> signal_right_click_;
 
 protected:
 
 public:
        sigc::signal<void>& signal_activate() { return signal_activate_; }
        sigc::signal<void>& signal_clicked() { return signal_activate_; }
-       sigc::signal<void>& signal_secondary() { return signal_secondary_; }
+       sigc::signal<void>& signal_middle_click() { return signal_middle_click_; }
+       sigc::signal<void>& signal_right_click() { return signal_right_click_; }
 
        void set_value(const synfig::Color &data);
        const synfig::Color &get_value();