Code

Refactoring SPColor to C++ and removing legacy CMYK implementation
[inkscape.git] / src / main.cpp
index dbca3f74ca7c65fbe34f5435ebfa18a787e71a9d..cc359793a518983bdec6b68639fe8777cce17d10 100644 (file)
@@ -56,7 +56,6 @@
 #include "sp-object.h"
 #include "interface.h"
 #include "print.h"
-#include "slideshow.h"
 #include "color.h"
 #include "sp-item.h"
 #include "sp-root.h"
@@ -78,6 +77,7 @@
 #include "io/sys.h"
 
 #include "debug/logger.h"
+#include "debug/log-display-config.h"
 
 #include "helper/png-write.h"
 
@@ -138,7 +138,6 @@ enum {
     SP_ARG_EXPORT_BBOX_PAGE,
     SP_ARG_EXTENSIONDIR,
     SP_ARG_FIT_PAGE_TO_DRAWING,
-    SP_ARG_SLIDESHOW,
     SP_ARG_QUERY_X,
     SP_ARG_QUERY_Y,
     SP_ARG_QUERY_WIDTH,
@@ -161,7 +160,6 @@ static void do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axi
 
 
 static gchar *sp_global_printer = NULL;
-static gboolean sp_global_slideshow = FALSE;
 static gchar *sp_export_png = NULL;
 static gchar *sp_export_dpi = NULL;
 static gchar *sp_export_area = NULL;
@@ -361,11 +359,6 @@ struct poptOption options[] = {
      N_("Print out the extension directory and exit"),
      NULL},
 
-    {"slideshow", 's',
-     POPT_ARG_NONE, &sp_global_slideshow, SP_ARG_SLIDESHOW,
-     N_("Show given files one-by-one, switch to next on any key/mouse event"),
-     NULL},
-
     {"vacuum-defs", 0,
      POPT_ARG_NONE, &sp_vacuum_defs, SP_ARG_VACUUM_DEFS,
      N_("Remove unused definitions from the defs section(s) of the document"),
@@ -389,92 +382,6 @@ struct poptOption options[] = {
     POPT_AUTOHELP POPT_TABLEEND
 };
 
-#include <ui/view/view.h>
-#include <desktop.h>
-#include <desktop-handles.h>
-#include <helper/action.h>
-#include <selection.h>
-
-class CmdLineAction {
-    gint _type;
-    gchar * _arg;
-
-    static std::list <CmdLineAction *> _list;
-
-public:
-    CmdLineAction (gint type, gchar const * arg) : _type(type), _arg(NULL) {
-        if (arg != NULL) {
-            _arg = g_strdup(arg);
-        }
-
-        _list.insert(_list.end(), this);
-
-        return;
-    }
-
-    ~CmdLineAction () {
-        if (_arg != NULL) {
-            g_free(_arg);
-        }
-    }
-
-    void doIt (Inkscape::UI::View::View * view) {
-        //printf("Doing: %s\n", _arg);
-        switch (_type) {
-            case SP_ARG_VERB: {
-                Inkscape::Verb * verb = Inkscape::Verb::getbyid(_arg);
-                if (verb == NULL) {
-                    printf(_("Unable to find verb ID '%s' specified on the command line.\n"), _arg);
-                    break;
-                }
-                SPAction * action = verb->get_action(view);
-                sp_action_perform(action, NULL);
-                break;
-            }
-            case SP_ARG_SELECT: {
-                SPDesktop * desktop = dynamic_cast<SPDesktop *>(view);
-                if (desktop == NULL) { break; }
-
-                SPDocument * doc = view->doc();
-                SPObject * obj = doc->getObjectById(_arg);
-                if (obj == NULL) {
-                    printf("Unable to find node ID: '%s'\n", _arg);
-                    break;
-                }
-
-                Inkscape::Selection * selection = sp_desktop_selection(desktop);
-                selection->add(obj, false);
-                break;
-            }
-        }
-    }
-
-    static void doList (Inkscape::UI::View::View * view) {
-        for (std::list<CmdLineAction *>::iterator i = _list.begin();
-                i != _list.end(); i++) {
-            CmdLineAction * entry = *i;
-            entry->doIt(view);
-        }
-    }
-
-    static bool idle (void) {
-        std::list<SPDesktop *> desktops;
-        inkscape_get_all_desktops(desktops);
-
-        // We're going to assume one desktop per document, because no one
-        // should have had time to make more at this point.
-        for (std::list<SPDesktop *>::iterator i = desktops.begin();
-                i != desktops.end(); i++) {
-            SPDesktop * desktop = *i;
-            //Inkscape::UI::View::View * view = dynamic_cast<Inkscape::UI::View::View *>(desktop);
-            doList(desktop);
-        }
-        return false;
-    }
-};
-std::list <CmdLineAction *> CmdLineAction::_list;
-
-
 static bool needToRecodeParams = true;
 gchar* blankParam = "";
 
@@ -713,6 +620,34 @@ int sp_common_main( int argc, char const **argv, GSList **flDest )
     return 0;
 }
 
+static void
+snooper(GdkEvent *event, gpointer data) { 
+    if(inkscape_mapalt())  /* returns the map of the keyboard modifier to map to Alt, zero if no mapping */
+    {
+        GdkModifierType mapping=(GdkModifierType)inkscape_mapalt();
+        switch (event->type) {
+            case GDK_MOTION_NOTIFY:
+                if(event->motion.state & mapping) {
+                    event->motion.state|=GDK_MOD1_MASK;
+                }
+                break;       
+            case GDK_BUTTON_PRESS:
+                if(event->button.state & mapping) {
+                    event->button.state|=GDK_MOD1_MASK;
+                }
+                break;       
+             case GDK_KEY_PRESS:
+                 if(event->key.state & mapping) {
+                     event->key.state|=GDK_MOD1_MASK;
+                 }
+                 break;                
+        default:
+            break;
+        }
+    }
+    gtk_main_do_event (event);
+}
+
 int
 sp_main_gui(int argc, char const **argv)
 {
@@ -724,6 +659,10 @@ sp_main_gui(int argc, char const **argv)
 
     inkscape_gtk_stock_init();
 
+    gdk_event_handler_set((GdkEventFunc)snooper, NULL, NULL);
+
+    Inkscape::Debug::log_display_config();
+
     /* Set default icon */
     gchar *filename = (gchar *) g_build_filename (INKSCAPE_APPICONDIR, "inkscape.png", NULL);
     if (Inkscape::IO::file_test(filename, (GFileTest)(G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_SYMLINK))) {
@@ -732,35 +671,22 @@ sp_main_gui(int argc, char const **argv)
     g_free (filename);
     filename = 0;
 
-    if (!sp_global_slideshow) {
-        gboolean create_new = TRUE;
+    gboolean create_new = TRUE;
 
-        /// \todo FIXME BROKEN - non-UTF-8 sneaks in here.
-        inkscape_application_init(argv[0], true);
+    /// \todo FIXME BROKEN - non-UTF-8 sneaks in here.
+    inkscape_application_init(argv[0], true);
 
-        while (fl) {
-            if (sp_file_open((gchar *)fl->data,NULL)) {
-                create_new=FALSE;
-            }
-            fl = g_slist_remove(fl, fl->data);
-        }
-        if (create_new) {
-            sp_file_new_default();
-        }
-    } else {
-        if (fl) {
-            GtkWidget *ss;
-            /// \todo FIXME BROKEN - non-UTF-8 sneaks in here.
-            inkscape_application_init(argv[0], true);
-            ss = sp_slideshow_new(fl);
-            if (ss) gtk_widget_show(ss);
-        } else {
-            g_warning ("No slides to display");
-            exit(0);
+    while (fl) {
+        if (sp_file_open((gchar *)fl->data,NULL)) {
+            create_new=FALSE;
         }
+        fl = g_slist_remove(fl, fl->data);
+    }
+    if (create_new) {
+        sp_file_new_default();
     }
 
-    Glib::signal_idle().connect(sigc::ptr_fun(&CmdLineAction::idle));
+    Glib::signal_idle().connect(sigc::ptr_fun(&Inkscape::CmdLineAction::idle));
     main_instance.run();
 
 #ifdef WIN32
@@ -842,8 +768,6 @@ sp_main_console(int argc, char const **argv)
             } else if (sp_query_x || sp_query_y) {
                 do_query_dimension (doc, false, sp_query_x? NR::X : NR::Y, sp_query_id);
             }
-
-            //CmdLineAction::doList(doc);
         }
 
         fl = g_slist_remove(fl, fl->data);
@@ -877,15 +801,20 @@ do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gch
     if (o) {
         sp_document_ensure_up_to_date (doc);
         SPItem *item = ((SPItem *) o);
-        NR::Rect area = item->invokeBbox(sp_item_i2doc_affine(item)); // "true" SVG bbox for scripting
 
-        Inkscape::SVGOStringStream os;
-        if (extent) {
-            os << area.extent(axis);
+        // "true" SVG bbox for scripting
+        NR::Maybe<NR::Rect> area = item->getBounds(sp_item_i2doc_affine(item));
+        if (area) {
+            Inkscape::SVGOStringStream os;
+            if (extent) {
+                os << area->extent(axis);
+            } else {
+                os << area->min()[axis];
+            }
+            g_print ("%s", os.str().c_str());
         } else {
-            os << area.min()[axis];
+            g_print("0");
         }
-        g_print ("%s", os.str().c_str());
     }
 }
 
@@ -1495,7 +1424,7 @@ sp_process_args(poptContext ctx)
                 gchar const *arg = poptGetOptArg(ctx);
                 if (arg != NULL) {
                     // printf("Adding in: %s\n", arg);
-                    new CmdLineAction(a, arg);
+                    new Inkscape::CmdLineAction((a == SP_ARG_VERB), arg);
                 }
                 break;
             }