Comment 0 for bug 174701

Revision history for this message
tbnorth (terry-n-brown) wrote :

This patch adds the command line switch --query-all which dumps id,x,y,w,h for all objects with an Id.

Index: main.cpp
===================================================================
--- main.cpp (revision 16644)
+++ main.cpp (working copy)
@@ -148,6 +148,7 @@
     SP_ARG_QUERY_Y,
     SP_ARG_QUERY_WIDTH,
     SP_ARG_QUERY_HEIGHT,
+ SP_ARG_QUERY_ALL,
     SP_ARG_QUERY_ID,
     SP_ARG_VERSION,
     SP_ARG_VACUUM_DEFS,
@@ -166,8 +167,9 @@
 static void do_export_emf(SPDocument* doc, gchar const* uri, char const *mime);
 #endif //WIN32
 static void do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gchar *id);
+static void do_query_all (SPDocument *doc);
+static void do_query_all_recurse (SPObject *o);

-
 static gchar *sp_global_printer = NULL;
 static gchar *sp_export_png = NULL;
 static gchar *sp_export_dpi = NULL;
@@ -196,6 +198,7 @@
 static gboolean sp_query_y = FALSE;
 static gboolean sp_query_width = FALSE;
 static gboolean sp_query_height = FALSE;
+static gboolean sp_query_all = FALSE;
 static gchar *sp_query_id = NULL;
 static int sp_new_gui = FALSE;
 static gboolean sp_vacuum_defs = FALSE;
@@ -367,6 +370,11 @@
      N_("Query the height of the drawing or, if specified, of the object with --query-id"),
      NULL},

+ {"query-all", 'S',
+ POPT_ARG_NONE, &sp_query_all, SP_ARG_QUERY_ALL,
+ N_("List id,x,y,w,h for all objects"),
+ NULL},
+
     {"query-id", 'I',
      POPT_ARG_STRING, &sp_query_id, SP_ARG_QUERY_ID,
      N_("The ID of the object whose dimensions are queried"),
@@ -791,7 +799,9 @@
                 do_export_emf(doc, sp_export_emf, "image/x-emf");
             }
 #endif //WIN32
- if (sp_query_width || sp_query_height) {
+ if (sp_query_all) {
+ do_query_all (doc);
+ } else if (sp_query_width || sp_query_height) {
                 do_query_dimension (doc, true, sp_query_width? NR::X : NR::Y, sp_query_id);
             } else if (sp_query_x || sp_query_y) {
                 do_query_dimension (doc, false, sp_query_x? NR::X : NR::Y, sp_query_id);
@@ -846,8 +856,45 @@
     }
 }

+static void
+do_query_all (SPDocument *doc)
+{
+ SPObject *o = NULL;

+ o = SP_DOCUMENT_ROOT(doc);
+
+ if (o) {
+ sp_document_ensure_up_to_date (doc);
+ do_query_all_recurse(o);
+ }
+}
+
 static void
+do_query_all_recurse (SPObject *o)
+{
+ SPItem *item = ((SPItem *) o);
+ if (o->id && SP_IS_ITEM(item)) {
+ NR::Maybe<NR::Rect> area = item->getBounds(sp_item_i2doc_affine(item));
+ if (area) {
+ Inkscape::SVGOStringStream os;
+ os << o->id;
+ os << "," << area->min()[NR::X];
+ os << "," << area->min()[NR::Y];
+ os << "," << area->extent(NR::X);
+ os << "," << area->extent(NR::Y);
+ g_print ("%s\n", os.str().c_str());
+ }
+ }
+
+ SPObject *child = o->children;
+ while (child) {
+ do_query_all_recurse (child);
+ child = child->next;
+ }
+}
+
+
+static void
 sp_do_export_png(SPDocument *doc)
 {
     const gchar *filename = NULL;